首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >索引mysql表(网格搜索)

索引mysql表(网格搜索)
EN

Stack Overflow用户
提问于 2018-09-21 19:05:26
回答 2查看 46关注 0票数 0

我有一个mysql表my_table,它有以下列:

代码语言:javascript
运行
复制
start_cell, end_cell, field_1, field_2, field_3 ..., field_n

大多数时候,我都想做这样的事情:

代码语言:javascript
运行
复制
select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'

start_cellend_cell都是从cell_1cell_9000

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

代码语言:javascript
运行
复制
alter table my_table add index(start_cell)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 20:03:57

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

代码语言:javascript
运行
复制
ALTER TABLE my_table ADD INDEX (start_cell, end_cell);

这个索引对于只测试start_cell的查询也是有效的,因为多列索引也是索引的任何前缀的索引(这是B树索引的自然结果)。

如果还需要优化不使用end_cell测试start_cell的查询,则可以添加第二个索引:

代码语言:javascript
运行
复制
ALTER TABLE my_table ADD INDEX (end_cell);
票数 1
EN

Stack Overflow用户

发布于 2018-09-21 19:15:56

这个问题有点宽泛,您应该考虑start_cell和end_cell是任何其他用途的字段类型,但使用联接或按索引分组的简单select *有时会更有用,如果组合的字段不止一个,但情况似乎并非如此。

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

代码语言:javascript
运行
复制
EXPLAIN select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'

它将向您展示查询的弱点,并能够向您指出最佳的MySQL解释选择方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52449756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档