如何加快查询速度,如SELECT id FROM table WHERE col1 LIKE“Someting%”ORDER BY col2 LIMIT 10

时间:2016-07-22 10:54:08

标签: mysql

我正在使用MariaDB 10.1

如何加快SELECT id FROM table WHERE col1 LIKE "Someting%" ORDER BY col2 LIMIT 10

之类的查询速度

由于%语句中的LIKE,我无法使用复合键(col1,col2),因此它会导致filesort。但是,执行filesort的结果数量非常大。

这种情况有解决方案吗?

2 个答案:

答案 0 :(得分:0)

对于此查询:

SELECT id
FROM table
WHERE col1 LIKE 'Someting%'
ORDER BY col2
LIMIT 10;

优化有两种选择。对于WHERE子句,您可以在table(col1)上使用索引 - 尽管添加col2id会覆盖查询中的所有列并进行一些改进。

这是有效的,因为LIKE字符串的开头没有通配符。如果您正在寻找单词,那么您可能需要考虑全文索引。

第二种选择更加神秘,但如果有很多行符合where子句,则可能会有所帮助:

select id
from (select id
      from table
      order by col2
     ) t
where col1 like 'Something%'
limit 10;

table(col2, id, col1)上的索引一起。我不是100%肯定这会起作用,但我的想法是鼓励引擎对索引进行全面扫描,测试每个条目的where子句。

答案 1 :(得分:-1)

INDEX 放在col1上。

  

索引用于快速查找具有特定列值的行。

添加 INDEX

的语法
ALTER TABLE `table` ADD INDEX `col1` (`col1`);