索引mysql表(网格搜索)

时间:2018-09-21 19:05:27

标签: mysql indexing

我有一个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_cellend_cell都从cell_1cell_9000

我做了以下索引以加快搜索速度:

alter table my_table add index(start_cell)

到目前为止,这个方法工作正常。但是,我想知道对于这个问题是否有更好的索引方法?谢谢!

2 个答案:

答案 0 :(得分:1)

如果通常在查询中同时测试两列,则应创建一个多列索引。

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);

答案 1 :(得分:0)

这个问题有点广泛,您应该考虑jb来考虑start_cell和end_cell是 除简单的select *以外的任何其他用法 使用加入或分组依据 如果合并多个字段,则索引有时会更有用,尽管事实并非如此

通常,检查正确索引的最佳方法是使用解释选择,即:

EXPLAIN select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'

它将向您显示查询的弱点,并能够为您提供最佳方法 MySQL explain select