首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询速度非常慢,有“喜欢”和“订单”

查询速度非常慢,有“喜欢”和“订单”
EN

Stack Overflow用户
提问于 2014-06-30 23:15:00
回答 1查看 60关注 0票数 0

我有以下问题:

代码语言:javascript
复制
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条件查询,则在可行的时间内运行。

当我将查询分成两个查询时,这个查询也执行得相当快:

代码语言:javascript
复制
SELECT k from (
select * from 
tbl t
WHERE 
(LOWER( col1 ) LIKE '9000000003%')
AND 
(col2=12334534 )
) x
order by x.col1  ASC
LIMIT 0,50

主要问题是查询是生成的,所以我不能重写它。

我如何优化它?

解释计划

代码语言:javascript
复制
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

代码语言:javascript
复制
field  type         null    key   default extra
k      bigint(20)   NO      PRI     
col1   varchar(255) YES     MUL     
col2   bigint(20)   NO          

PS我完全可以访问mysql服务器(我使用5.6)

EN

回答 1

Stack Overflow用户

发布于 2014-06-30 23:20:49

这是您的查询:

代码语言:javascript
复制
SELECT k
from  tbl t
WHERE LOWER( col1 ) LIKE '9000000003%' AND 
      col2 = 12334534
order by t.col1 ASC
LIMIT 0, 50;

lower()完全没有必要,因为模式只有数字(加上默认的排序规则对like不区分大小写)。因此,您可以这样重写查询:

代码语言:javascript
复制
SELECT k
from  tbl t
WHERE col1 LIKE '9000000003%' AND 
      col2 = 12334534
order by t.col1 ASC
LIMIT 0, 50;

然后,可以使用索引来加快查询速度。最好的指标是:

代码语言:javascript
复制
create index tbl_col2_col1_k on tbl(col2, col1, k);

这将使查询速度惊人地快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24500296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档