提升效率
- 查询时,先将数据从数据库查出来,然后再做函数处理,尽量减少占用数据库连接(事务)的时间
- 若数据量比较少,不超过100条记录,不需要使用索引
- 在
where
条件及orderBy
字段上建立索引,但一张表中最多不能超过6个索引 union all
会查询出相同的记录,而且不对结果集进行排序;union
会过滤掉重复的数据,而且按照字母的顺序排序(自然排序),性能较union all
差;如果确定查询结果不重复且对顺序没有要求,使用union all
效率高许多- 若表中索引为复合索引,那么作为
where
条件的第一个字段须是复合索引的第一个字段,若where
条件不使用复合索引的第一个字段,则不会使用该索引,会导致全表扫描 - 若
Student
表中仅存在一个由三个列name,age,address
组成的复合索引,where
条件中只是用到了name,address
两个过滤条件,那么只有name
这一列应用到了该复合索引 - 若表中存在大量重复数据,例如
sex
列,male
和female
几乎各占一半,不会使用索引,应当把索引建立在区分度比较高的列 clustered
索引列插入一条记录,将引起全表数据顺序的调整,耗费相当大的资源- 尽量使用数字类型列,因为执行引擎在执行连接和查询时,对于数字类型只需要比较一次,而字符类型要从首字母开始匹配。
- 尽量避免向客户端输出大量数据,或者存在大事务操作,以提高系统的并发能力
避免以下引起全表扫描的语句
where
条件中存在=null
判断- 前置
%
、not in
的使用 where
条件中使用函数或者表达式计算where
条件使用or
分割条件,若其中一个条件没有使用索引,那么被or
连接的多个条件都不使用索引,执行全表扫描