【征询意见】两条SQL语句查询效率比较,那条更优
1,
-
SQL code
SELECT * FROM news WHERE TYPE IN (SELECT id FROM classify WHERE type='2')
2,
-
SQL code
SELECT 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 code
SELECT 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 改写,也是一样。
理论上一样