SQL优化(有时间就更新)

1、给WHERE子句和ORDER BY子句中涉及的列上加索引。

2、WHERE子句中尽量避免使用NULL判断,否则数据库会放弃使用索引,而进行全表扫描。
    
    例如,下面这条语句就使用了NULL判断,它将会进行全表扫描:
    
        SELECT * FROM person t WHERE t.age IS NULL;
    
    应该为age字段设置特殊值,而不是使用NULL,比如age字段的值未知时,可以使用“-1”来代替NULL:
        
        SELECT * FROM person t WHERE t.age=-1;
    
3、不要在WHERE子句中使用“!=”和“<>”运算符,如果使用了,数据库会放弃索引,而使用全表扫描。

4、尽量避免在WHERE子句中使用OR运算符,例如:
    
    SELECT * FROM person t WHERE t.age=32 OR t.name='admin';
    
    如果age上有索引,而name上没有索引,数据库会放弃使用索引,而进行全表扫描。
    
    如果想要使用age列上的索引,可以使用下面的语句代替:
        
        SELECT * FROM person t WHERE t.age=32
        UNION ALL
        SELECT * FROM person t WHERE t.name='admin';
    
5、尽量避免在WHERE子句中使用IN或NOT IN语句,否则可能导致数据库进行全表扫描。可以使用BETWEEN AND语句或EXISTS语句代替。

6、少使用模糊查询,模糊查询会导致数据库进行全表扫描,例如:
    
    SELECT * FROM person t WHERE t.name like '%dmin%';

7、避免在WHERE子句中使用表达式,例如:
    
    SELECT * FROM person t WHERE t.age/5=10;
    
    可以改为:
        
        SELECT * FROM person t WHERE t.age=10*5;

8、尽量避免在WHERE子句中使用函数。

9、注意,一个复合索引,如果在WHERE子句中没有使用到该索引的字一个字段,则数据库会放弃使用该索引。

10、表的索引数量不应太多。比如一些不常出现在WHERE子句中的列可以不加索引。

11、应该避免更新聚簇索引列。

12、使用varchar代替char,节省存储空间。

13、如果是MySQL数据库,请先将隔离级别设置为“读提交”(MySQL数据库的默认隔离级别是“可重复读”)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值