【征询意见】两条SQL语句查询效率比较,那条更优解决方案
【征询意见】两条SQL语句查询效率比较,那条更优1,SQL codeSELECT * FROMnews WHERETYPE IN (SELECT id FROMc
【征询意见】两条SQL语句查询效率比较,那条更优 1,
SQL codeSELECT * FROM news WHERE TYPE IN (SELECT id FROM classify WHERE type='2') 2,
SQL codeSELECT n.* FROM news n,classify c WHERE c.id=n.type AND c.type='2' 最好能说个理由,今天同事们为了这两个语句辩论了整整一中午了噶
下班前结贴,谢谢大虾们赐教
[解决办法] explain出来
or
set profiling=1
show profiles
show profile for query 1;
[解决办法] 效率无非指的是cpu消耗,内存消耗,io消耗,给我们最直观的感觉当然是执行时间
看这两个语句哪个执行快,就代表在当前服务器状态下哪个效率高
[解决办法] 索引能否修改
在classify上建立id、type联合索引
news上建立type索引
[解决办法] 据不完全的统计,第二种可能会更好。
[解决办法] 探讨 据不完全的统计,第二种可能会更好。[解决办法] 贴建表及插入记录的SQL
实际上你自己测试 一下,看看执行时间就判断出来了
[解决办法] 探讨 项目正在做,没有真实数据!很多人测试的结果都不一样,所以才发帖询问[解决办法] 这个问题无法直接下结论,要看具体的情况。
1. 索引的情况如何? 如果没有任何type上的索引,则理论上两个差不多。
2. 每个表中的数据情况,每个表中的记录总数是多少?如果两个表中都只有10条记录,则没什么差别,所有记录都可以在内存中搞定。
[解决办法] 探讨 两个表都只有ID一个主键索引,其它什么索引都没有,也没有联合索引[解决办法] 没看懂第二个,n.id?? 一看还以为是C#还是Java的点操作
[解决办法] 第二个效率应该要高点。。
[解决办法] 学习~~~
[解决办法] 我就得都不错,只是有些地方要改改
[解决办法] mark,我不凭感觉说话了。
[解决办法] 要随前后文件改,可能第二个好一点。
[解决办法] 长见识;啦
[解决办法] 学习~~~
[解决办法] 嗯不错很好啊!多多学习~~
[解决办法] 两条语句是一样的。
你们公司没懂sql执行计划?
SQL codeSELECT n.* FROM news n,classify c WHERE c.id=n.type AND c.type='2'SELECT * FROM news WHERE TYPE IN (SELECT id FROM classify WHERE type='2')SELECT * FROM news n join classify c on n.TYPE=c.ID where type='2'SELECT * FROM news n inner join classify c on n.TYPE=c.ID where type='2'[解决办法] in 用 EXISTS 改写,也是一样。[解决办法] 理论上一样------解决方案--------------------
好的数据库引擎会优化成一样的 另外,type最好加上索引[解决办法] 我觉得两个语句都是一样的效率! 在SQL 2005中 ,第二条语句 SELECT n.* FROM news n,classify c WHERE c.id=n.type AND c.type='2' 表news有聚集索引但是查询中没有用到news.id因此对于表news做了一个聚集所以扫描运算,相反对classify表做了一个聚集索引查找运算,然后再进行嵌套循环 第一条查询也是一样的分析,所以效率都是一样的。[解决办法] 应该效率是一样的。 因为都从WHERE 开始遍历表。 两张表都遍历了一次[解决办法] 差不多吧 第一个先执行子查询 第二个先执行c.type='2',再执行连接 这样2个理论上就差不多了[解决办法] 差不蛮多!!!!!!!!!!!!!!!!![解决办法] 挺好的[解决办法] 关于这个问题其实以前就有一个类似的讨论。 http://topic.csdn.net/u/20090626/16/65f043cf-b9d9-4707-b660-9857461177f4.html[解决办法] 路过接分路过接分路过接分路过接分[解决办法] 如果数据量很大的话,比如两个表都有超多行数据DBMS会选择最优方式去执行,不会有什么差别;如果数据量少的话内存中就解决了[解决办法] 理論應該是一樣的,注重要看那兩個表各自的索引情況,一般情況都習慣用第二種。[解决办法] 从表面看是第二种,但还是要根据真实数据的[解决办法] 关注学习中!!![解决办法] 我觉得第二种好[解决办法] 插入100万数据测试依下不就完了?[解决办法] 第二条比第一条快。数据量大时IN的效率不高。[解决办法] 探讨 引用: 两个表都只有ID一个主键索引,其它什么索引都没有,也没有联合索引 第二个应该高一点,用到了id索引。[解决办法] 探讨 第二条比第一条快。数据量大时IN的效率不高。[解决办法] LZ可以用大数据量测试看看[解决办法] 我也觉得第二种方法会好一些 第一种方法用IN,数据量太大应该会很差~ (我也没有测试过,属于个人理解!期待最权威的论证结果)[解决办法] 拿到数据库里执行下 记录下时间 测试下不就出来了?[解决办法] 如果是我会把第二条查询语句写成inner join的连接方式,不过DBMS优化过以后也应该是这样,所有大数据量时也许第二条语句更好[解决办法] 感觉LZ的两条查询语句逻辑都不相同哦[解决办法] 测试胜于雄辩[解决办法] 这个在数据库系统概论第四版里面有讲到... 记得是第一条优[解决办法] 我的意见:第一种好,从底层来说,只要是select就是执行了 笛卡尔积和除法操作,第一句层次分明易于理解,第二句sql执行了笛卡尔积和投影操作。[解决办法] 数据库会退sql进行一定的优化。想这种情况,两个的执行计划应该一样。------解决方案--------------------
mark 那种才是真的好啊 晕[解决办法] sql 会自己优化?[解决办法] 这个要看表中的数据而言