mysql确定查询的哪一部分是最慢的

时间:2015-10-15 17:35:44

标签: mysql

我在mySQL中编写了一个select语句。持续时间 50 秒,获取时间 206 秒。这是很长一段时间。我想理解我的查询部分效率低下,因此我可以改善其运行时间,但我不确定如何在mySQL中执行此操作。

我的桌子有超过1,000,000条记录。我也有一个内置的索引:

KEY `idKey` (`id`,`name`),

这是我的问题:

SELECT name, id, alt_id, count(id), min(cost), avg(resale), code from
 history where name like "%brian%" group by id;

我已经查看了mySQL执行计划,但我无法从中找出错误:

enter image description here

如果我突出显示"全指数扫描"图片的一部分,我看到了:

Access Type: Index
    Full Index Scan
Key/Index:
   Used Key Parts: id, name
   Possible Keys: idKey, id-Key, nameKey
Attach Condition:
   (`allhistory`.`history`.`name` LIKE '%brian%')

Rows Examined Per Scan: 1098181
Rows Produced Per Join: 1098181
Filter: 100%

我知道我可以通过在查询中添加LIMIT 100来扫描较小的数据子集,虽然它会缩短时间,但(28秒持续时间,0.000秒获取)我也希望看到所有的记录 - 所以我真的不想限制它。

对此主题更有见识的人是否可以建议我的查询,索引或方法可能对我想要完成的工作效率低下?

2 个答案:

答案 0 :(得分:1)

我认为您的保险索引可能会倒退。尝试切换订单(名称,ID)。这样WHERE子句就可以利用索引。

答案 1 :(得分:1)

此问题仅在mysql全文搜索功能中有解决方案。

我不认为使用like是可行的解决方案。表扫描不是具有数百万行的解决方案。

我在这个link中写了一个答案,我希望你找到一个可行的解决方案,通过这个参考和快速步行。

这是Full Text Search上的一个Mysql手册页。