1. 程式人生 > >關於sql優化整理一下

關於sql優化整理一下

1.where 子句中可以對欄位進行 null 值判斷嗎?
       可以,比如 select id from t where num is null 這樣的 sql 也是可以的。但是最好不要給資料庫留 NULL,儘可
  能的使用 NOT NULL 填充資料庫。不要以為 NULL 不需要空間,比如:char(100) 型,在欄位建立時,空間就固定了,
  不管是否插入值(NULL 也包含在內),都是佔用 100 個字元的空間的,如果是 varchar 這樣的變長欄位,null 不佔
  用空間。可以在 num 上設定預設值 0,確保表中 num 列沒有 null 值,然後這樣查詢:select id from t where num = 0。

2. select * from admin left join log on admin.admin_id = log.admin_id where
log.admin_id>10 如何優化?
優化為: select * from (select * from admin where admin_id>10) T1 lef join log on T1.admin_id =
log.admin_id。
使用 JOIN 時候,應該用小的結果驅動大的結果(left join 左邊表結果儘量小如果有條件應該放到左邊先處理,
right join 同理反向),同時儘量把牽涉到多表聯合的查詢拆分多個 query(多個連表查詢效率低,容易到之後鎖表和
阻塞)

3. limit 的基數比較大時使用 between
例如:select * from admin order by admin_id limit 100000,10
優化為:select * from admin where admin_id between 100000 and 100010 order by admin_id

4.儘量避免在列上做運算,這樣導致索引失效
例如:select * from admin where year(admin_time)>2014
優化為: select * from admin where admin_time> '2014-01-01'