我有一个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)
到目前为止,这个方法工作正常。但是,我想知道对于这个问题是否有更好的索引方法?谢谢!
答案 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