我有一张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)
到目前为止效果还不错。但是,我想知道是否有更好的索引方法来解决这个问题?谢谢!
2条答案
按热度按时间7gs2gvoe1#
如果您通常测试查询中的两列,那么应该创建多列索引。
这个索引对于只测试
start_cell
,因为多列索引也是索引的任何前缀的索引(这是b树索引的自然结果)。如果您还需要优化该测试的查询
end_cell
没有start_cell
,可以添加第二个索引:o7jaxewo2#
问题有点宽泛,您应该考虑到起始单元格和结束单元格的字段类型是任何其他用法,而不是简单的
select *
如果合并了多个字段,使用join或groupby索引有时会更有用,尽管情况似乎并非如此通常,检查正确索引的最佳方法是使用explain select,即:
它将向您展示查询的弱点,并能为您指出最佳的方法