首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql SQL优化

mysql SQL优化
EN

Stack Overflow用户
提问于 2013-01-18 01:10:30
回答 3查看 186关注 0票数 1

这个查询需要一个小时

代码语言:javascript
复制
select *,
      unix_timestamp(finishtime)-unix_timestamp(submittime) timetaken 
from joblog 
where jobname like '%cas%' 
and submittime>='2013-01-01 00:00:00' 
and submittime<='2013-01-10 00:00:00'
order by id desc limit 300;

但是,使用一个submittime完成相同的查询只需.03秒

该表有210万行

你知道是什么导致了这个问题吗?或者如何调试它?

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 01:15:02

您的第一步应该是使用MySQL EXPLAIN来查看查询正在做什么。它可能会给你一些关于如何解决你的问题的见解。

我猜测jobname LIKE '%cas%'是最慢的部分,因为您正在进行通配符文本搜索。在这里添加索引甚至没有帮助,因为您有一个前导通配符。有没有办法在没有这样的前导通配符的情况下执行这个查询?另外,在submittime上添加索引可能会提高此查询的速度。

票数 0
EN

Stack Overflow用户

发布于 2013-01-18 01:20:39

您可以尝试向查询添加一个限制,看看这是否会提高它的返回速度……

摘自http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

有时MySQL不使用索引,即使有索引也是如此。发生这种情况的一种情况是,优化器估计使用索引将需要MySQL访问表中很大百分比的行。(在这种情况下,表扫描可能要快得多,因为它需要更少的查找。)但是,如果这样的查询使用LIMIT仅检索某些行,MySQL无论如何都会使用索引,因为它可以更快地找到要在结果中返回的少数行。

票数 0
EN

Stack Overflow用户

发布于 2013-01-18 15:04:09

代码语言:javascript
复制
select *,unix_timestamp(finishtime)-unix_timestamp(submittime) timetaken  
from joblog  
where   (submittime between '2013-01-10 00:00:00'  and  '2013-01-19 00:00:00')   
and jobname is not null 
and jobname like '%cas%';

这是有帮助的

(0.93秒)

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

https://stackoverflow.com/questions/14384378

复制
相关文章

相似问题

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