⑤ group by与order by很类似,其实质是先排序后分组,遵照索引创建顺序的最佳左前缀原则。注意where高于having,能写在where中的限定条件就不要去having限定了。
通俗理解口诀:
全值匹配我最爱,最左前缀我的菜;
带头大哥不能死,中间兄弟断狗带;
索引列上少计算,范围之后全完蛋;
覆盖索引不写星,Like百分右边站;
不等空值还有or,索引失效要少用。
补充:in和exists优化
原则:小表驱动大表,即小的数据集驱动大的数据集。
in:当B表的数据集小于A表的数据集时,in优于exists
select * from A where id in (select id from B)
等价于:
for select id from B
for select * from A where A.id=B.id
exists:当A表的数据集小于B表的数据集时,exists优于in
select * from A where exists (select 1 from B where B.id=A.id)
等价于:
for select * from A
for select * from B where B.id=A.id
(A表与B表的id字段应建立索引)
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx