[英]query is super slow with like and order by
我有以下查詢:
SELECT k from
tbl t
WHERE
(LOWER( col1 ) LIKE '9000000003%')
AND
(col2=12334534 )
order by t.col1 ASC
LIMIT 0,50
tbl
大約有187000行
當我在WHERE
和ORDER BY
一起使用時,此查詢非常慢(我等不及要完成)。 但是如果我刪除ORDER BY
或LIKE
條件查詢將在可行的時間內運行
當我將其分為兩個查詢時,該查詢的執行速度也非常快:
SELECT k from (
select * from
tbl t
WHERE
(LOWER( col1 ) LIKE '9000000003%')
AND
(col2=12334534 )
) x
order by x.col1 ASC
LIMIT 0,50
主要問題是查詢已生成,所以我無法重寫它。
我該如何優化?
解釋計划
id select_type table type possible_keys key key_len ref rows extra
'1', 'SIMPLE', 'tbl', 'index', NULL, 'col1_idx', '768', NULL, '50', 'Using where'
DDL
field type null key default extra
k bigint(20) NO PRI
col1 varchar(255) YES MUL
col2 bigint(20) NO
PS我可以完全訪問mysql服務器(我使用5.6)
這是您的查詢:
SELECT k
from tbl t
WHERE LOWER( col1 ) LIKE '9000000003%' AND
col2 = 12334534
order by t.col1 ASC
LIMIT 0, 50;
lower()
完全不必要,因為該模式只有數字(加上默認排序規則對like
不區分大小寫)。 因此,您可以像這樣重寫查詢:
SELECT k
from tbl t
WHERE col1 LIKE '9000000003%' AND
col2 = 12334534
order by t.col1 ASC
LIMIT 0, 50;
然后,您可以使用索引來加快查詢速度。 最好的索引是:
create index tbl_col2_col1_k on tbl(col2, col1, k);
這應該使查詢速度飛快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.