请问一个sql有关问题,要查一分钟啊压力太大了,求大神指点

请教一个sql问题,要查一分钟啊,压力太大了,求大神指点!

三张表:tb_statistic_stat,tb_statistic_exit,tb_developers_service

SHOW INDEX 分别为

Non_unique:0、0、0

Key_name:PRIMARY、PRIMARY、PRIMARY

Seq_in_index:1、1、1

Column_name:uid、id、id

Collation:A、A、A

Cardinality:115755、489436、46

Index_type:BTREE、BTREE、BTREE

目前的sql语句是这样

SQL code


  
SELECT * FROM tb_statistic_stat  s,
(SELECT COUNT(id) visitCount,uid FROM tb_statistic_exit WHERE 1=1  GROUP BY uid) v,
tb_developers_service d 
WHERE s.uid=v.uid AND s.cpid = d.developersId AND s.appid = d.productsId  limit 0,10

查询需要一分多钟 求大神指点。。。。

表结构分别如下:

SQL code


  

Create Table

CREATE TABLE `tb_statistic_stat` (
  `uid` varchar(36) NOT NULL,
  `appid` varchar(255) DEFAULT NULL,
  `chid` varchar(10) DEFAULT NULL,
  `cpid` varchar(10) DEFAULT NULL,
  `cydia` varchar(255) DEFAULT NULL,
  `lang` varchar(255) DEFAULT NULL,
  `operator` varchar(255) DEFAULT NULL,
  `ua` varchar(255) DEFAULT NULL,
  `udid` varchar(255) DEFAULT NULL,
  `ver` varchar(50) DEFAULT NULL,
  `version` varchar(50) DEFAULT NULL,
  `macAddress` varchar(255) DEFAULT NULL,
  `timeString` datetime DEFAULT NULL,
  PRIMARY KEY (`uid`)
)


CREATE TABLE `tb_statistic_exit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(500) DEFAULT NULL,
  `visitTime` datetime DEFAULT NULL,
  `onlineTime` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
)



CREATE TABLE `tb_developers_service` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `developersName` varchar(20) DEFAULT NULL,
  `productsName` varchar(10) DEFAULT NULL,
  `productsUrl` varchar(255) DEFAULT NULL,
  `appId` int(255) DEFAULT NULL,
  `developersId` varchar(10) DEFAULT NULL,
  `productsId` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
)



create index idx_uid_id on tb_statistic_exit(uid,id);

然后再把select的explain信息打印出来。




用INNER JOIN连接查询,然后explain…比较一下了查询计划那个是最优的。



把1楼提示的索引加上,然后执行

explain SELECT COUNT(id) visitCount,uid FROM tb_statistic_exit WHERE 1=1 GROUP BY uid;

把结果贴出来。




不大可能是这样的结果。

show index from tb_statistic_exit;

看看结果。




创建如下两个索引。

create index xxx on tb_statistic_stat(cpid,appid);

create index xxx2 on tb_statistic_exit(uid);

然后

SELECT * ,(SELECT COUNT(id) FROM tb_statistic_exit where uid=s.uid) as visitCount

FROM tb_statistic_stat s,tb_developers_service d 

WHERE s.cpid = d.developersId AND s.appid = d.productsId limit 0,10;

请问一个sql有关问题,要查一分钟啊压力太大了,求大神指点

相关文章:

你感兴趣的文章:

标签云: