一、创建索引
索引类型:
1.主键索引(PRIMARY KEY)它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同事创建主键索引(一个表中只能有一个主键索引)
2.唯一索引(UNIQUE):唯一索引的值必须唯一,但允许为空值。创建:ALTER TABLE 表名 ADD UNIQUE(UNIQUE_NAME)
3.普通索引(INDEX):最基本的索引,它没有任何限制。创建:ALTER TABLE 表名 ADD INDEX 索引名称(INDEX_NAME)
4.组合索引(INDEX):一个索引包含多个列,多用于避免回表查询。ALTER TABLE 表名 ADD INDEX 索引名称(INDEX_NAME1,INDEX_NAME2,......INDEX_NAMEN)
5.全文索引(FULLTEXT):全文索引,是目前搜索引擎使用的一种关键技术。ALTER TABLE 表名 ADD FULLTEXT 索引名称(FULLTEXT_NAME)
二、SQL语句优化
1.统一项目中的所有SQL语句格式(查询语句的大小写以及格式都会影响到SQL查询的速度)
2.尽量用select 所用到的字段 FROM table。不要用select * FROM table。
3.对所用到的查询尽量要避免全表查询(在where前对null进行处理、应尽量避免在 where 子句中使用 or 来连接条件、应尽量避免在 where 子句中使用!=或<>操作符、尽量避免使用in 和 not in、使用like不要前面也加“%”、应尽量避免在 where 子句中对字段进行表达式操作“number/30 = 10”、应尽量避免在where子句中对字段进行函数操作)
4.用 exists 代替 in
5.能用一条SQL解决的不要用多条SQL去解决
6.设计到复杂的SQL时可以考虑使用临时表
7.SQL更新时只更新对应的字段,涉及不到的不需要进行更新操作
三、用varchar/nvarchar 代替 char/nchar
要尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。不要以为 NULL 不需要空间,比如:char(64) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 64个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。
四、使用表别名
当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个列名上。这样就可以减少解析的时间并减少哪些友列名歧义引起的语法错误
五、使用WHERE条件
1.数据库一般采用自下而上的顺序解析where字句,根据这个原理表连接最好写在其他where条件之前,那些可以过滤掉最大数量记录
2.尽量使用WHERE,避免使用HAVING字句,因为HAVING只会在检索出所有记录之后才对结果集进行过滤,而where则是在聚合前刷选记录,如果能通过where字句限制记录的数目,那就能减少这方面的开销。HAVING中的条件一般用于聚合函数的过滤,除此之外,应该将条件写在where字句中