大多数情况下,程序员比较喜欢使用in来查询符合某些条件的数据,最近在查询某个角色有哪些用户的方法中,使用了in语句: ) FROM baseuser AND BaseUser.Id IN (SELECT UserId FROM spysxtUserRole WHERE RoleId = '6d989d918dfe428c95e4469f866b1299' ) 可以看到时间是0.249ms; 一位朋友看到后,建议改为Join,改后的语句: ) from baseuser A left join (
比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = 'x' 与select * from (select id, name from table1 union all select id, name from table2) where name = 'x'. 哪一种方式性能更好一些呢? 希望高手能详细说明下, 并且考虑到有索引和无索引的情
很多人都知道 在各种数据库里面 not in 的效率极其低下.例如 select * from a where a.id not in ( select id from b ) 我们假如a表有 10万条记录, 而b表里面也有10万条记录, 那么需要的判断是 10万 乘以 10万 ,则是100亿次判断.所以执行效率极其低下. 即使发现存在就返回.那么也有 100亿/2=50亿次判断. 此时,我们可以用 Left join 来进行判断则快很多 select a.* from a left join
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and operator_id=20839 and operate_time>1371169729 and operate_time<1371174603 and type=2; 系统使用者反应有一个功能越来越慢,于是工程师找到了上面的SQL.并且兴致冲冲的找到了我,“这个SQL需要优化,给我把每个字段都
转自美团技术博客,原文地址:http://tech.meituan.com/mysql-index.html 建索引的一些原则: 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如
add by zhj:这是美团点评技术团队的一篇文章,讲的挺不错的. 原文:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”.“SQL语句优化”.“了解数据库原理”等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和
编写sql语句中,经常需要编写获取一张数据表中不存在与另一张表的数据,相关编写方法如下: 方法1: 使用not in ,效率低下,在数据较小的情况下可以采用如下编写 SELECT * FROM a AND a.Id NOT IN( SELECT Id FROM B WHERE B.IsDeleted GROUP BY B.Id ); 方法2:使用left join 较第一种方法快 SELECT * FROM a LEFT JOIN b ON a.Id=b.Id AND b.Id IS NULL