目前两张表
表一:sms_ticket(一次8000条数据左右)
`msgtype` VARCHAR(10) NULL DEFAULT NULL,
`provindex` BIGINT(20) NULL DEFAULT NULL,
INDEX `provindex` (`provindex`)
表二:sms_phonesegment(目前数据22000左右)
`startprefix` BIGINT(20) NOT NULL,
`endprefix` BIGINT(20) NOT NULL,
`provindex` INT(10) NOT NULL DEFAULT '0',
`cityindex` INT(10) NOT NULL DEFAULT '0',
INDEX `startprefix_endprefix` (`startprefix`, `endprefix`)
sql:
SELECT r.provIndex provIndex,
SUM(CASE TYPE WHEN '00' THEN msgCount ELSE 0 END) mo_count,
SUM(CASE TYPE WHEN '01' THEN msgCount ELSE 0 END) mt_count
FROM
(SELECT COUNT(1) msgCount,mph.provindex provIndex,ct.msgtype TYPEFROM sms_ticket ct
INNER JOIN sms_phonesegment mph ON ct.provindex BETWEEN mph.startprefix AND mph.endprefix
GROUP BY TYPE,provIndexORDER BY provIndex) r
GROUP BY r.provIndex;
在 正式库上 查询一次 用了 300+秒 看图
求大神呀 给出优化方案 我简直 头都要大了,在我们公司租用的服务器上相同数据 相同sql 执行的情况 1秒都不到
表一:sms_ticket(一次8000条数据左右)
`msgtype` VARCHAR(10) NULL DEFAULT NULL,
`provindex` BIGINT(20) NULL DEFAULT NULL,
INDEX `provindex` (`provindex`)
表二:sms_phonesegment(目前数据22000左右)
`startprefix` BIGINT(20) NOT NULL,
`endprefix` BIGINT(20) NOT NULL,
`provindex` INT(10) NOT NULL DEFAULT '0',
`cityindex` INT(10) NOT NULL DEFAULT '0',
INDEX `startprefix_endprefix` (`startprefix`, `endprefix`)
sql:
SELECT r.provIndex provIndex,
SUM(CASE TYPE WHEN '00' THEN msgCount ELSE 0 END) mo_count,
SUM(CASE TYPE WHEN '01' THEN msgCount ELSE 0 END) mt_count
FROM
(SELECT COUNT(1) msgCount,mph.provindex provIndex,ct.msgtype TYPEFROM sms_ticket ct
INNER JOIN sms_phonesegment mph ON ct.provindex BETWEEN mph.startprefix AND mph.endprefix
GROUP BY TYPE,provIndexORDER BY provIndex) r
GROUP BY r.provIndex;
在 正式库上 查询一次 用了 300+秒 看图
求大神呀 给出优化方案 我简直 头都要大了,在我们公司租用的服务器上相同数据 相同sql 执行的情况 1秒都不到
