SQL调优

89 阅读3分钟

一、创建索引

    索引类型:
    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 table3.对所用到的查询尽量要避免全表查询(在where前对null进行处理、应尽量避免在 where 子句中使用 or 来连接条件、应尽量避免在 where 子句中使用!=<>操作符、尽量避免使用innot 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字句中