标签:建立 一个 操作 where 计算 sts 转换 开头 子查询
建立了一个索引分别字段为 a b c
where a ... and b ... order by c,这种使用顺序就符合最佳做前缀,从左向右依次使用了索引
where b ... and a ... order by c,这样很明显顺序不对,并不满足最佳左前缀,从而导致了索引失效
建立了一个复合索引 a b c,在查询的时候,尽量把这些索引字段都用上
如果你在索引上进行任何操作,索引就必将失效。
比如你对索引进行加减乘除计算,进行一些函数计算,或进行一些类型转换,在这种情况下,索引都会失效
假设有 a b c 这些字段是复合索引,给 a 字段进行乘法操作,那么b c 字段都将会失效
一般式:外表大,用IN;内表大,用EXISTS。
非关联子查询:
非相关子查询是独立于外部查询的子查询,子查询执行完毕后将值传递给外部查询。
select * from emp where sal > (select max(sal) from emp);
关联子查询:
外部查询每执行一次,内部查询也会执行一次。
外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录,之后外部查询根据返回的记录做出决策。
select * from table1 where exists(select * from table2 where id>=30000 and table1.name=table2.name)
优化:select * from table1 innner join table2 using(name) where table2.id>=30000
关联子查询和非关联子查询的不同点在于,关联子查询依赖于父查询,父查询和子查询是有联系的
若中间索引列用到了范围(>、<、like等),则后面的所以全失效。
SELECT * FROM user WHERE name = 'July' AND age < 25 AND pos = 'dev'
第三个字段pos索引失效了。
在模糊查询是,不要以百分号开头
select * from user where name = '' or age > 0;
标签:建立 一个 操作 where 计算 sts 转换 开头 子查询
原文地址:https://www.cnblogs.com/loveer/p/11562821.html