我正在使用MariaDB 10.1
如何加快SELECT id FROM table WHERE col1 LIKE "Someting%" ORDER BY col2 LIMIT 10
由于%
语句中的LIKE
,我无法使用复合键(col1,col2),因此它会导致filesort。但是,执行filesort的结果数量非常大。
这种情况有解决方案吗?
答案 0 :(得分:0)
对于此查询:
SELECT id
FROM table
WHERE col1 LIKE 'Someting%'
ORDER BY col2
LIMIT 10;
优化有两种选择。对于WHERE
子句,您可以在table(col1)
上使用索引 - 尽管添加col2
和id
会覆盖查询中的所有列并进行一些改进。
这是有效的,因为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`);