SQL的一些優化

負向查詢不能使用索引數據庫

select * from system_user where id not in (1,2,3,4,5)索引

應該修改成it

select * from system_user where id in(6,7,8,9,10) 效率

 前導模糊查詢不能使用索引select

select name from system_user where name like '%yuanzheng'im

非前導則能夠 數據

select name from system_user where name like 'zengy%'查詢

 數據區分不明顯的不建議建立索引移動

如 user 表中的性別字段,能夠明顯區分的才建議建立索引,如身份證等字段。類型轉換

字段的默認值不要設置爲null 

這樣會帶來和預期不一致的查詢結果。

在字段上計算不能命中索引

 select * from system_user where FROM_UNIXTIME(create_time) < CURDATE()

應該修改成

select * from system_user where create_time <  FROM_UNIXTIME(CURDATE())

最左前綴問題

若是給 user 表中的 username pwd 字段建立了複合索引那麼使用如下SQL 都是能夠命中索引

select * from system_user where username='zengyz' and pwd='123456'

select * from system_user where pwd='123456' and username='zengyz'

select * from system_user where username='zengyz'

可是使用

select * from system_user where pwd='123456'

是不能命中索引的 

若是明確知道只有一條記錄返回 

select * from system_user where username='zengyz' limit 1

能夠提升效率,能夠讓數據庫中止遊標移動    

不要讓數據庫幫咱們作強制類型轉換 

select * from system_user where phone=13200000000

這樣雖然能夠查出數據,可是會致使全表掃描。

須要修改成

select * from system_user where phone='13200000000'

相關文章
相關標籤/搜索