1.对查询进行优化,应避免全表扫描,首先应考虑在where及order by涉及的列上建立索引

2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

  select u.name from user u where u.id is null

可以在num上设置默认值0,确保表中num列没有null值,例如:

  select u.name from user u where u.id=0

类似例子:

  1.  应尽量避免在where子句中使用!=或<>操作符
  2.  应尽量避免在where子句中使用or操作符
  3.  应尽量避免在where子句中使用in和not in操作符
  4.  应尽量避免在where子句中使用参数
  5.  应尽量避免在where子句中对字段进行表达式操作  
  6.  应尽量避免在where子句中对字段进行函数操作  

3.不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引

4.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序想一致

5.可以用exists代替in,例如:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists (select 1 from b where num=a.num)

6.并不是所有索引对查询都有效,SQL是根据表中的数据来进行查询优化的,当索引列有大量数据重复是,SQL查询可能不会去利用索引

7.建立索引不是越多越好,适当的索引可以提高相应的select 效率。过多的索引会降低insert和update的效率,因为insert或update时有可能重建索引,所以一个表的索引最后不要超过6个

8.尽量使用数字型字段,若只含数值信息的字段尽量不要设计成字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中的每一个字符,而对于数字型而言只需要比较一次就够了

9.尽可能的使用varchar/nvarchar代替char/nchar,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率更高

10.任何地方都不要使用select * from t,用具体的字段列表代替“*”,不要返回用不到的字段