1.設計**的時選擇合適的字段型別
一般來說,資料庫中的表越小,在它上面執行的查詢就會越快,因此在建立表的時候,為了獲取更好的效能,我們可以將表的字段寬度設得盡可能的小。
1.1.盡可能選擇varchar來代替char,但是如果某字段長度已經固定(手機號,郵編等)我們可以使用char(11)來固定欄位的長度。同樣的整型字段我們我們也應該選擇合適長度的型別。
1.2.對於某些字段(省份,性別等)我們可以選擇整型欄位來代替文字型別,因為數值型的資料被處理的速度較快
2.使用連線(join)來代替部分子查詢
使用子查詢可以一次性完成很多邏輯上很多步驟才能完成的sql操作,同時可以避免事務和表鎖死,但是有些情況下可以使用連線代替子查詢,因為這樣不需要在記憶體中建立臨時表來完成這個查詢
2.1 在使用連線時可將部分資料查詢出來後再進行連線
3.使用聯合(union)來代替手動建立臨時表
它可以把需要使用臨時表的兩條或更多的select查詢合併到乙個查詢中,在客戶端結束回話的時間自動刪除臨時表,要注意所有的select語句中的字段數目要相同
3.1 盡量避免在查詢條件中使用or來連線條件,這樣會引擎放棄索引進行全表掃瞄
select id from sc where id = 10 or id = 20
可以選擇下面這種
select id from sc where id = 10 union
select id from sc where id = 20
4.使用索引
索引是提高資料庫效能的常用方法
4.1 索引應該用於join,where判斷和orderby排序的字段上
4.2 不要對含有大量重複值的字段建立索引,當索引列出現大量重複值的時間,查詢可能不回去利用索引
4.3 應該注意的是建立索引是需要消耗計算機資源的,不要隨意建立索引,索引提公升select查詢效率,但相應的降低了insert和update的效率,因為索引可能會被重新建立
5.優化查詢語句
絕大多數情況下,使用索引可以提高查詢的速度,但如果sql語句使用不恰當的話,索引將無法發揮它應有的作用
5.1 最好在相同型別欄位間進行比較操作
5.2 不要在查詢中讓字段型別進行自動轉換,這樣會引擎放棄索引進行全表掃瞄
5.3 在建立索引的字段上盡量不要使用函式進行操作,這樣會引擎放棄索引進行全表掃瞄
5.4 在搜尋字元型子串時,我們有時會使用like關鍵字和萬用字元,但這樣是以犧牲系統效能為代價使做法變簡單,部分搜尋可以嘗試下面的方法
select `id` from books where `name` like "mysql%"
select `id` from books where `name` >= "mysql" and `name` < "mysqm"
5.5 使用exists代替in是乙個好的選擇
5.6 盡量不要使用!=和<>或者對欄位進行null判斷,這樣會引擎放棄索引進行全表掃瞄
5.7 不要使用select *,用具體字段代替「*」
5.8 資料型別出現隱式轉換的時候也不會使用索引,特別是當列型別是字串,那麼一定記得在where條件中把字串常量值用引號引起來,否則即便這個列上有索引,mysql也不會用到,因為mysql預設把輸入的常量值進行轉換以後才進行檢索
mysql 語句優化例項 MySQL 語句優化例項
優化 limit 分頁 執行耗時 1.379s select from vio basic domain info limit 1000000,10 處理分頁慢查詢的方式一般有以下幾種 思路一 構造覆蓋索引 思路二 優化 offset 無法用上覆蓋索引,那麼重點是想辦法快速過濾掉前 100w 條資料...
mysql語句優化原則 MySQL語句優化的原則
1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,可考慮建立群集索引 b.經常同...
mysql語句優化原則 mysql語句優化原則
有時候發現資料量大的時候查詢起來效率就比較慢了,學習一下mysql語句優化的原則,自己在正常寫sql的時候還沒注意到這些,先記錄下來,慢慢一點一點的學,加油!這幾篇部落格寫的都可以 使用索引的原則 1.最左字首匹配原則。mysql會一直向右匹配直到遇到範圍查詢 不會用到b的索引 where a 1 ...