我有一个mysql表my_table,它有以下列:
start_cell, end_cell, field_1, field_2, field_3 ..., field_n大多数时候,我都想做这样的事情:
select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'start_cell和end_cell都是从cell_1到cell_9000
为了加快搜索速度,我做了以下索引:
alter table my_table add index(start_cell)到目前为止这还不错。然而,我想知道是否有更好的索引方法来解决这个问题?谢谢!
发布于 2018-09-21 20:03:57
如果通常在查询中测试两列,则应创建多列索引。
ALTER TABLE my_table ADD INDEX (start_cell, end_cell);这个索引对于只测试start_cell的查询也是有效的,因为多列索引也是索引的任何前缀的索引(这是B树索引的自然结果)。
如果还需要优化不使用end_cell测试start_cell的查询,则可以添加第二个索引:
ALTER TABLE my_table ADD INDEX (end_cell);发布于 2018-09-21 19:15:56
这个问题有点宽泛,您应该考虑start_cell和end_cell是任何其他用途的字段类型,但使用联接或按索引分组的简单select *有时会更有用,如果组合的字段不止一个,但情况似乎并非如此。
通常,检查适当索引的最佳方法是使用解释选择,即:
EXPLAIN select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'它将向您展示查询的弱点,并能够向您指出最佳的MySQL解释选择方法。
https://stackoverflow.com/questions/52449756
复制相似问题