索引mysql表(网格搜索)

j9per5c4  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(263)

我有一张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)

到目前为止效果还不错。但是,我想知道是否有更好的索引方法来解决这个问题?谢谢!
7gs2gvoe

7gs2gvoe1#

如果您通常测试查询中的两列,那么应该创建多列索引。

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

o7jaxewo2#

问题有点宽泛,您应该考虑到起始单元格和结束单元格的字段类型是任何其他用法,而不是简单的 select * 如果合并了多个字段,使用join或groupby索引有时会更有用,尽管情况似乎并非如此
通常,检查正确索引的最佳方法是使用explain select,即:

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

它将向您展示查询的弱点,并能为您指出最佳的方法

相关问题