一、提高sql执行效率---in与exist
1. where column in (select * from table where ...)
2. ...where exists (select 'C' from table where ...)
使用in查询时,会首先执行子查询,并将结果存放在一张临时表中再执行主查询;使用exists查询时,会首先执行主查询,再执行子查询,直到遇到第一个符合条件的结果为止。很明显exist查询方式要比in的效率高很多。
group by:避免使用having字句,having在检索出所有结果后才会过滤筛选分组,这个过程需要排序统计等操作。
在持久化数据操作时,sql尽量使用占位符(?)。
二、sql执行顺序
1.from 字句组装来自不同数据源的数据;
2.where 按条件对记录进行筛选;
3.group by 将数据按条件进行分组;
4.使用聚合函数进行计算;
5.having 字句对分组进行筛选;
6.计算所有表达式;
7.select 字段;
8.order by 将结果进行排序。
三、select、count(1)
select * 将解析所有列,select column 制定column时将不需要解析---》select column;
sql解析时要将所有小写转化成大写,所以sql直接使用大写效率更高;
count(1)与count(*)结果一样,但在执行时*会被翻译成字段的具体名字---》count(1);
count(1)中的1指的是:想象表中有这样的一个字段,该字段的值都是1,count(1)即计算一共有多少个1,等同于count('s'),count(2121213),...;1并不是指第一个字段。效率更高的是count(1).