首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL优化:如何在MySQL中优化查询?

SQL优化:如何在MySQL中优化查询?
EN

Stack Overflow用户
提问于 2012-10-12 16:45:26
回答 3查看 144关注 0票数 0

我正在编写一个SQL查询,它需要高度优化的解决方案,以避免超时。但是,我不知道如何持续优化以下SQL查询:

代码语言:javascript
复制
select distinct j.job,f.path,p.path 
from fixes f, jobs j, paths p where f.job=j.id and p.id =f.path 
and (p.path like '//Tools/Web/%' or p.path = '//Tools/Web');

我已经为以下字段创建了索引(基本上是所有内容):

  • jobs.id
  • jobs.job
  • paths.path
  • paths.id
  • fixes.job
  • fixes.path

在每个“修复”、“作业”、“路径”表中都有大约50,000行,当前超时时间为6分钟。

“解释”命令显示以下信息,尝试解密

代码语言:javascript
复制
1   SIMPLE  j   index   PRIMARY         job     62   (null)    73226    Using index; Using temporary
1   SIMPLE  f   ref     path,job        job     8    j.id      825  
1   SIMPLE  p   eq_ref  PRIMARY,path    PRIMARY 8    f.path    1        Using where

“paths”表的表创建语句:

代码语言:javascript
复制
CREATE TABLE `paths` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `path` varchar(250) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `path` (`path`),
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-12 17:03:04

这不会得到同样的结果吗?

代码语言:javascript
复制
select distinct j.job,f.path,p.path  
from fixes f
join  jobs j on  f.job=j.id 
join  paths p  on p.id =f.path  
where p.path like '//Tools/Web%' 

或者几乎总是一个昂贵的特征。

您也可以尝试Union查询,它们通常比OR更快。

代码语言:javascript
复制
select  j.job,f.path,p.path  
from fixes f
join  jobs j on  f.job=j.id 
join  paths p  on p.id =f.path  
where p.path like '//Tools/Web/%' 
union 
select  j.job,f.path,p.path  
from fixes f
join  jobs j on  f.job=j.id 
join  paths p  on p.id =f.path  
where  p.path = '//Tools/Web'); 
票数 2
EN

Stack Overflow用户

发布于 2012-10-12 17:06:17

你需要不同的吗?也许,在您的数据集中,您可能不需要它。您可以尝试不使用这种方式重写查询,并使用path.p .p条件启动WHERE条件。您也可以尝试加入另外两个表。

例如。

代码语言:javascript
复制
    select j.job,f.fix,p.path 
    from paths.p
    join fixes f on (f.path = p.id)
    join jobs j on (f.job = j.id)
    where (p.path like '//Tools/Web/%' or p.path = '//Tools/Web')

     group by job, fix, path

如果您需要不同的,组可能会有帮助。另外,在原始查询中有两个名为"path“的列。

票数 2
EN

Stack Overflow用户

发布于 2012-10-12 16:47:37

使用Explain your sql query查看查询是否使用这些索引

我相信您的索引是错误的,因为6分钟的查询时间很长。

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

https://stackoverflow.com/questions/12863606

复制
相关文章

相似问题

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