簡體   English   中英

查詢非常慢,喜歡和排序

[英]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行

當我在WHEREORDER BY一起使用時,此查詢非常慢(我等不及要完成)。 但是如果我刪除ORDER BYLIKE條件查詢將在可行的時間內運行

當我將其分為兩個查詢時,該查詢的執行速度也非常快:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM