目前两张表
表一: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秒都不到
解决方案 »
- 高手们,请教一条mysql语句,谢谢!
- load data infile语句问题
- 如何创建数据库多对多关系中的有业务需求的连接表
- mysql外键设置问题,触发事件ON DELETE 如何设置为SET DEFAULT
- 当一个事务既包含innodb表,又包含myisam表,会不会影响事务,或者说事务递交,回滚之类的还能起作用吗?
- 两个或多个游标怎么做?
- shapefile文件导入postgresql数据库,大家帮帮我吧!
- mysql支不支持四表连接查询
- 在linux下,安装mysql得二进制文件mysql-3.23.55-pc-linux-i686.tar.gz的命令是什么?
- 一年就上亿的评论表后续如何优化
- 数据库表设计问题
- 项目程序如何绕过触发器?
INNER JOIN sms_phonesegment mph 你这两个表的连接后数量有2亿多行
INNER JOIN sms_phonesegment mph ON ct.provindex BETWEEN mph.startprefix AND mph.endprefix
GROUP BY TYPE,provIndexORDER BY provIndex问题是这个连出来的结果太大
INNER JOIN sms_phonesegment mph ON ct.provindex BETWEEN mph.startprefix AND mph.endprefix
GROUP BY TYPE,provIndexORDER BY provIndex
这句话看看效率
公司上 ticket表数据20万 phonesegment表数据22000 跑的结果
正式环境 ticket表数据650条 phonesegment表数据22000 跑的结果区别太大了 公司上数据量时间反而短 正式环境数据量小时间反而长
explain select ...这样大家可以进行分析有的放矢。
正式库上面的show index
正式库上的plain
公司库的 show index
公司库上plain
plain后发现 公司库上会用索引,而正式库上不会用索引