【发布时间】:2015-06-04 07:42:03
【问题描述】:
我有以下简单连接查询
SELECT
count(*)
FROM
DBx.caseview p2015
INNER JOIN DBy.caseview p2014 ON p2015.casenumber=p2014.casenumber;
由于某种原因,它只会让 MySQL 挂在那里很长时间,直到我累了并取消它。相反,如果在 MSSQL 上使用相同的数据集运行完全相同的代码,则查询最多需要几秒钟。
是否有需要在 MySQL 上更改参数以加快此类查询的速度?
这是我在 MySQL 中的表
CREATE TABLE `caseview` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`CASEID` varchar(18) DEFAULT NULL,
`CASENUMBER` int(10) DEFAULT NULL,
`ACCOUNTID` varchar(18) DEFAULT NULL,
`ACCOUNT` varchar(256) DEFAULT NULL,
`ASSETID` varchar(18) DEFAULT NULL,
`SAPPRODUCTGROUP` varchar(10) DEFAULT NULL,
`PRODUCT` varchar(128) DEFAULT NULL,
`FAMILY` varchar(128) DEFAULT NULL,
`CONTACTID` varchar(18) DEFAULT NULL,
`OWNERID` varchar(18) DEFAULT NULL,
`TYPE` varchar(128) DEFAULT NULL,
`PRIORITY` varchar(24) DEFAULT NULL,
`ORIGIN` varchar(24) DEFAULT NULL,
`SUBJECT` varchar(256) DEFAULT NULL,
`STATUS` varchar(24) DEFAULT NULL,
`LASTACTIVITY` varchar(1024) DEFAULT NULL,
`INITALDESCRIPTION` varchar(1024) DEFAULT NULL,
`CLOSEDDATE` datetime DEFAULT NULL,
`CREATEDDATE` datetime DEFAULT NULL,
`LASTMODIFIEDDATE` datetime DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID_UNIQUE` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=122393 DEFAULT CHARSET=utf8;
有两个表和上面的配置完全相同,只是数据不同
DBx.caseview p2015 有 197647 行 DBy.caseview p2014 有 122392 行
【问题讨论】:
-
正在使用哪些索引?此外,您可以使用 explain dev.mysql.com/doc/refman/5.7/en/explain.html 查看查询计划是什么。这将使您知道正在使用哪些索引。
-
也许使用
COUNT(field_Id) -
@sqluser 会慢一些。
-
@efx 为两个表提供
EXPLAIN+SHOW CREATE TABLE+ 两个表中有多少行 + 多少行匹配。 PS:这不是一个“简单”的查询——它是对整个表的扫描(虽然不是很明显) -
我很好奇
FROM和JOIN子句。tablex和tabley是不同的数据库吗?