SQL
UNION :
在UNION 查询中,如果没有指定 ALL 关键字,数据库系统将检查每个查询结果集合,试图合并可能存在重复记录;不管实际情况是否存在重复记录,这一操作是必然执行。
在执行记录集合的检查过程中,数据库系统将对结果的全部字段建立临时索引,以便判断。因此,这一过程是极其消耗系统资源的。
在需要执行UNION 操作的SQL中,业务上一般是接收重复记录的。因此,如果不加入ALL 关键字,将影响系统的执行效率。
FROM :
解析器按照从右到左的顺序处理FROM子句中的表名 也就是说 数据量少的表要尽量远离FROM
WHERE :
当条件有多个的时候。那些可以过滤掉最大数量记录的条件那些可以过滤掉最大数量记录的条件尽量放在,原理这个WHERE的末尾。
SELECT :
少用*这个大家都知道。
用Where子句替换HAVING子句
避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、统计等操作,如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销
EXISTS 和 IN
EXISTS :外大内小的时候使用特别是(里面只有一个条件的时候)
IN :外小内大。 ---加not同理
用表连接替换EXISTS
用EXISTS替换DISTINCT
索引:
不能使用 != <> NOT
不能在索引列上使用函数
索引类不能在 前面+%
不能在索引列上计算
不能在索引列上进行文字连接
检索NULL值时,不能使用索引列。
UNION :
在UNION 查询中,如果没有指定 ALL 关键字,数据库系统将检查每个查询结果集合,试图合并可能存在重复记录;不管实际情况是否存在重复记录,这一操作是必然执行。
在执行记录集合的检查过程中,数据库系统将对结果的全部字段建立临时索引,以便判断。因此,这一过程是极其消耗系统资源的。
在需要执行UNION 操作的SQL中,业务上一般是接收重复记录的。因此,如果不加入ALL 关键字,将影响系统的执行效率。
FROM :
解析器按照从右到左的顺序处理FROM子句中的表名 也就是说 数据量少的表要尽量远离FROM
WHERE :
当条件有多个的时候。那些可以过滤掉最大数量记录的条件那些可以过滤掉最大数量记录的条件尽量放在,原理这个WHERE的末尾。
SELECT :
少用*这个大家都知道。
用Where子句替换HAVING子句
避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、统计等操作,如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销
EXISTS 和 IN
EXISTS :外大内小的时候使用特别是(里面只有一个条件的时候)
IN :外小内大。 ---加not同理
用表连接替换EXISTS
用EXISTS替换DISTINCT
索引:
不能使用 != <> NOT
不能在索引列上使用函数
索引类不能在 前面+%
不能在索引列上计算
不能在索引列上进行文字连接
检索NULL值时,不能使用索引列。