選取最適用的字段屬性
可能的情況下,應該盡量把字段設定為notnull,這樣在將來執行查詢的時候,資料庫不用去比較null值
使用連線(join)來代替子查詢(sub-queries)
雖然使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易,但是有些情況下子查詢可以被更有效率的連線(join)..替代
,比如在查詢使用者訂單的時候,使用連線的效果就比子查詢要好得多。
使用聯合(union)來代替手動建立的臨時表
它可以把需要使用臨時表的兩條或更多的select查詢合併的乙個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證資料庫整齊、高效
。使用union來建立查詢的時候,我們只需要用union作為關鍵字把多個select語句連線起來就可以了
使用事務當乙個
語句塊中的某一條語句執行出錯的時候,整個語句塊的操作就會變得不確定起來
,會造成資料的不完整,甚至會破壞資料庫中的資料。要避免這種情況,就應該使用事務
,這時候事物的作用就是
要麼語句塊中每條語句都操作成功,要麼都失敗。換句話說,就是可以保持資料庫中資料的一致性和完整性
鎖定表儘管事務是維護資料庫完整性的乙個非常好的方法,但卻因為它的獨占性,有時會影響資料庫的效能,尤其是在很大的應用系統中
在有些情況下我們可以通過鎖定表的方法來獲得更好的效能
使用外來鍵
鎖定表的方法可以維護資料的完整性,但是它卻不能保證資料的關聯性。這個時候我們就可以使用外來鍵
使用索引
索引是提高資料庫效能的常用方法,它可以令資料庫伺服器以比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有max(),min()和orderby這些命令的時候,效能提高更為明顯
優化的查詢語句
對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。
應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。
應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄
應盡量避免在 where 子句中使用 or 來連線條件in 和 not in 也要慎用,否則會導致全表掃瞄
應盡量避免在 where 子句中對字段進行表示式操作
盡量避免在where子句中對字段進行函式操作
當我們優化查詢語句的時候注意以下幾點:
首先,最好是在相同型別的字段間進行比較的操作
其次,在建有索引的字段上盡量不要使用函式進行操作
最後,應該注意避免在查詢中讓mysql進行自動型別轉換,因為轉換過程也會使索引變得不起作用
選取最適用的字段屬性
可能的情況下,應該盡量把字段設定為notnull,這樣在將來執行查詢的時候,資料庫不用去比較null值
使用連線(join)來代替子查詢(sub-queries)
雖然使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易,但是有些情況下子查詢可以被更有效率的連線(join)..替代
,比如在查詢使用者訂單的時候,使用連線的效果就比子查詢要好得多。
使用聯合(union)來代替手動建立的臨時表
它可以把需要使用臨時表的兩條或更多的select查詢合併的乙個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證資料庫整齊、高效
。使用union來建立查詢的時候,我們只需要用union作為關鍵字把多個select語句連線起來就可以了
使用事務當乙個
語句塊中的某一條語句執行出錯的時候,整個語句塊的操作就會變得不確定起來
,會造成資料的不完整,甚至會破壞資料庫中的資料。要避免這種情況,就應該使用事務
,這時候事物的作用就是
要麼語句塊中每條語句都操作成功,要麼都失敗。換句話說,就是可以保持資料庫中資料的一致性和完整性
鎖定表儘管事務是維護資料庫完整性的乙個非常好的方法,但卻因為它的獨占性,有時會影響資料庫的效能,尤其是在很大的應用系統中
在有些情況下我們可以通過鎖定表的方法來獲得更好的效能
使用外來鍵
鎖定表的方法可以維護資料的完整性,但是它卻不能保證資料的關聯性。這個時候我們就可以使用外來鍵
使用索引
索引是提高資料庫效能的常用方法,它可以令資料庫伺服器以比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有max(),min()和orderby這些命令的時候,效能提高更為明顯
優化的查詢語句
對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。
應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。
應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄
應盡量避免在 where 子句中使用 or 來連線條件in 和 not in 也要慎用,否則會導致全表掃瞄
應盡量避免在 where 子句中對字段進行表示式操作
盡量避免在where子句中對字段進行函式操作
當我們優化查詢語句的時候注意以下幾點:
首先,最好是在相同型別的字段間進行比較的操作
其次,在建有索引的字段上盡量不要使用函式進行操作
最後,應該注意避免在查詢中讓mysql進行自動型別轉換,因為轉換過程也會使索引變得不起作用
MySQL SQL語句優化
檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...
MySQL SQL 語句優化方法
對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引.導致索引失效的操作 應盡量避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引...
MySQL SQL語句優化explain關鍵字
explain select from score where cno 3 105 and degree select degree from score where sno 109 id select type table type possible keys keykey len refrows...