首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高SQL查询速度

问如何提高SQL查询速度
EN

Stack Overflow用户
提问于 2013-04-18 13:58:24
回答 1查看 118关注 0票数 0

我需要建议,如果这种调整是可能的。

表:

代码语言:javascript
复制
CREATE TABLE UTIL_DAY (
  CompID varchar(15) collate utf8_czech_ci NOT NULL,
  TestplanID int(10) unsigned NOT NULL default '0',
  FromDate datetime NOT NULL default '0000-00-00 00:00:00',
  ToDate datetime NOT NULL default '0000-00-00 00:00:00',
  Interval int(11) NOT NULL default '0',
  Variant varchar(25) collate utf8_czech_ci default NULL,
  WO_ID int(11) default NULL,
  SAPTime int(5) default NULL,
  UseTime int(5) NOT NULL,
  MeasureCount int(10) unsigned NOT NULL,
  KEY CompID (CompID),
  KEY TestplanID (TestplanID),
  KEY WO_ID (WO_ID),
  KEY FromDate (FromDate),
  KEY Variant (Variant)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

当前查询:

代码语言:javascript
复制
UPDATE UTIL_DAY UDAY SET TestplanID = (SELECT TestplanID 
                                       FROM (SELECT UD_U.Variant,UD_U.WO_ID,VS.TestplanID 
                                             FROM (SELECT UD.Variant,UD.WO_ID 
                                                   FROM UTIL_DAY UD WHERE SUBSTR(CompID,1,3) <> 'AOI' 
                                                   GROUP BY UD.Variant,UD.WO_ID) UD_U 
                                             JOIN VARIANTS V ON UD_U.Variant = V.Variant 
                                             JOIN VARIANT_STATUS VS ON V.VariantID = VS.VariantID 
                                             JOIN TESTPLANS_WO_ID TW ON UD_U.WO_ID = TW.WO_ID 
                                             WHERE VS.TestplanID = TW.TestplanID 
                                             GROUP BY UD_U.Variant,UD_U.WO_ID ) TP 
                                       WHERE TP.Variant = UDAY.Variant AND TP.WO_ID = UDAY.WO_ID)

我的更新是临时表:

代码语言:javascript
复制
CREATE TEMPORARY TABLE UTIL_DAY_TEMP (
Variant varchar(25) COLLATE 'utf8_czech_ci' NOT NULL,
WO_ID int unsigned NOT NULL,
TestplanID int unsigned NOT NULL,
PRIMARY KEY Variant_WO_ID (Variant, WO_ID)) COMMENT='' ENGINE='InnoDB' COLLATE 'utf8_czech_ci';
INSERT IGNORE INTO UTIL_DAY_TMP (SELECT UD_U.Variant,UD_U.WO_ID,VS.TestplanID 
                FROM (SELECT UD.Variant,UD.WO_ID 
            FROM UTIL_DAY UD WHERE SUBSTR(CompID,1,3) <> 'AOI' 
            GROUP BY UD.Variant,UD.WO_ID) UD_U 
      JOIN VARIANTS V ON UD_U.Variant = V.Variant 
      JOIN VARIANT_STATUS VS ON V.VariantID = VS.VariantID 
      JOIN TESTPLANS_WO_ID TW ON UD_U.WO_ID = TW.WO_ID 
      WHERE VS.TestplanID = TW.TestplanID 
      GROUP BY UD_U.Variant,UD_U.WO_ID);
 UPDATE UTIL_DAY UDAY SET TestplanID = (SELECT TestplanID 
                                        FROM UTIL_DAY_TEMP TP 
                                         WHERE TP.Variant = UDAY.Variant AND TP.WO_ID = UDAY.WO_ID);

这一改进将查询速度提高了400%,超过两百万行。但是这种改进有同样的结果吗?感谢您的回答。

EN

回答 1

Stack Overflow用户

发布于 2013-04-18 14:01:03

首先,使用

mysql中的EXPLAIN命令。

在此之后,确定是否有索引可以帮助您(警告:不要失控地创建索引)此外,还可以查看mysql上的复合索引文档

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

https://stackoverflow.com/questions/16075509

复制
相关文章

相似问题

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