1.避免全表扫描,首先考虑在where 及 order by 涉及的 的列上加索引.
2.应尽量避免在where子句中用进行 null 值判断.创建表时 null 值默认值,但大多数时候应该使用not null , 或者使用一个特殊的值 , 如 0 , -1 作为默认的值.
3.应该尽量避免在where 子句中使用 != 或 <> 操作符, Mysql 只有对以下操作才使用索引.<, <= , = , > ,>= between , in, 以及某些时候的like
4.in 使用时候注意范围不能太大,生产中有一次 in 后面值太大超过了1000, 导致sql查不出结果.in 和NOT IN 也要慎用 , 否则会导致全表扫描. 对于连续数值能用between 就不要用 in
5.应尽量避免在where 子句中使用 or 连接条件. 否则导致引擎 放弃使用索引, 而进行全表扫描. 可以使用 union 合并查询
6.union 和 union all 的区别 ?
7.全模糊查询和 左模糊查询 也会导致 索引失效.
8.where子句中使用参数, 也会导致全表扫描
9.应该尽量避免在where子句中 对字段 进行表达式操作 和 函数操作.
10.很多时候 用Exists 代替 in 是一个很好的选择.
11.索引能提高查询效率, 但同时也降低 insert 和update 效率,一个表上的所用也不要太多.
12.尽可能使用varcher , nvarcher 代替char , nchar
13 具体字段代替 select * , 不用的字段不查询.
14.使用表的别名 , 多个连接时 为每个表增加别名, 可以减少解析时间, 并减少那些有column 歧义引起的语法错误.
15.不要超过5个以上的表连接(join),