MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 8414|回复: 7
打印 上一主题 下一主题

SQL查询速度与表的先后顺序问题

[复制链接]
跳转到指定楼层
1#
发表于 2007-7-20 18:15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作者:kider

在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表(放在where的最后),最先处理。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。

例1:
表 TAB1 16,384 条记录
表 TAB2 1 条记录

选择TAB2作为基础表 (最好的方法)
select count(*) from tab1,tab2 执行时间0.96秒
选择TAB1作为基础表 (不佳的方法)
select count(*) from tab2,tab1 执行时间26.09秒
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
发表于 2007-10-30 16:10:38 | 只看该作者
我测试了一下,感觉好像你的说法有点问题。
---------------------------------------------------------------------------
mysql> select count(*) from ACTION;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.96 sec)

mysql> select count(*) from CONFIGTEMPLATE;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)
-------------------------------------------------------------------------
mysql> select count(*) from ACTION, CONFIGTEMPLATE;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (8.23 sec)

mysql> select count(*) from CONFIGTEMPLATE, ACTION;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (8.26 sec)
---------------------------------------------------------------------------------
根据上面的测试结果,似乎没有太明显的差别。
另外我的测试表都是innodb,不知道是不是这个原因,所有才没有差别。
3#
发表于 2007-10-30 21:41:24 | 只看该作者
首先很欣赏你的这种探索和试验精神,学习之!

“SQL查询速度与表的先后顺序问题”一文是针对Oracle数据库的。因为由Oracle的SQL优化机制所决定(成本、代价),以上结论是正确的。

查询了资料,而MySQL是代价优化机制,意味着不管表在前还是在后,MySQL都会以SQL花费的代价为优化前提,综合得出一个代价最低的SQL去执行,所以表在前或后都被优化成一样的代价SQL,前后顺序就没有多大意义了。故你的试验是正确的。

感谢你的试验。
4#
发表于 2007-10-31 12:02:10 | 只看该作者
谢谢,又涨见识了!
5#
发表于 2008-9-1 17:18:21 | 只看该作者
真是牛人啊,对你这种试验精神很敬佩.不过你那个1000000条数据的表怎么弄的,能比较快的插入这么多测试数据?是直接在sql中做的,还是通过程序循环完成的?
6#
发表于 2008-9-1 17:19:21 | 只看该作者
感觉人气不是很旺啊
7#
发表于 2008-9-1 19:17:22 | 只看该作者
是呀,没有足够的宣传呢,好东西还没有被充分的发现呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-18 06:08 , Processed in 0.069122 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表