首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MySQL查询优化:用子查询顶替非主键连接查询

2013-04-02 
MySQL查询优化:用子查询代替非主键连接查询一对多的两张表,一般是一张表的外键关联到另一个表的主键。但也

MySQL查询优化:用子查询代替非主键连接查询

一对多的两张表,一般是一张表的外键关联到另一个表的主键。但也有不一般的情况,也就是两个表并非通过其中一个表的主键关联。

例如:

BEGINDECLARE i INT;START TRANSACTION;SET i=0;WHILE i<10000 DOINSERT INTO t_team VALUES(i+1,CONCAT('team',i+1));SET i=i+1;END WHILE;SET i=0;WHILE i<1000000 DOINSERT INTO t_people VALUES(i+1,CONCAT('people',i+1),CONCAT('team',i%10000+1));SET i=i+1;END WHILE;COMMIT;END

SQL语句执行效率:

连接查询

SELECT * FROM t_team t,t_people p WHERE t.tname=p.team_nameAND p.pname='people20000' LIMIT 1;

Time:12.594 s

 

连接查询

SELECT * FROM t_team t INNER JOIN t_peoplep ON t.tname=p.team_name WHERE p.pname='people20000' LIMIT 1;

Time:12.360 s

 

子查询

SELECT * FROM (SELECT * FROM t_people WHEREpname='people20000' LIMIT 1) p, t_team t WHERE t.tname=p.team_name LIMIT 1;

Time:0.016 s


作者:叉叉哥   转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/8737910


热点排行