mysql 優化方案,純乾貨

2021-10-07 20:13:19 字數 1840 閱讀 2887

查詢資料庫的資料盡量使用索引來查詢,避免全表掃瞄。盡量只查詢索引條件的字段,例如,一張user使用者資料表的id欄位為索引,name為使用者為非索引字段,當查詢某條資料時,直接用id查詢比用name查詢效率會高很多。因為葉子節點儲存id的值,這樣不用回表查詢,實現了索引覆蓋。

從資料庫中查詢資料,sql語句盡量避免使用or來連線條件查詢資料。因為使用or會導致執行sql的時候進行範圍的索引掃瞄或則全表查詢,效率降低。例如,sql語句select id from user where name='a' or name='b',可以改為以下的形式來提高查詢的效率:  select id from user where name='a'   union    select id from user where name='b' 

在連續數值的查詢中,能使用between的情況下,盡量使用between,而不使用in。in和not in可能會導致全表查詢。

sql語句的where查詢條件,對欄位進行表示式操作,會導致mysql引擎放棄使用索引而進行全表掃瞄查詢。例如 select *  from user  where  id/2=10

sql語句的where查詢條件,對欄位進行函式操作,也會導致mysql引擎放棄使用索引而進行全表掃瞄查詢。例如,下面語句查詢name欄位以abc開頭的id,可以更改寫法,提高查詢的效率。  select  substr(name,2,3)  from `user`  where    substr(name,2,3)='me0'

多張資料表查詢資料,使用inner join,left/right join來代替子查詢。因為子查詢需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。

select  * from `user`  a where  exists  (select `name` from `user`  b where a.id=19)  和    select  * from `user`  a where id  in  (select id from `user`  b where b.id=19) 。 in()適合b錶比a表資料小的情況,exists()適合b錶比a表資料大的情況

在使用like進行資料表的查詢時,能用單%的情況下,不建議使用雙%,雙%查詢會導致mysql引擎放棄使用索引而進行全表掃瞄查詢,查詢時盡量把%放後面,或則不適用%。

在mysql建立聯合索引時會遵循最左字首匹配的原則,即最左優先,在檢索資料時從聯合索引的最左邊開始匹配。左邊匹配不到,整個sql不走索引。select * from `user` where  u_one='1'  and   u_two='2'  

從資料庫中查詢資料時候,使用精確的型別匹配。比如  select id from user where id='3'  如果id建立的varchar型別的走索引,如果寫成  select id from user where id=3 不走索引

選取最適用的字段屬性 ,一般說來,資料庫中的表越小,執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中字段的寬度設得盡可能小。另外乙個提高效率的方法是在可能的情況下,應該盡量把字段設定為not null,這樣在將來執行查詢的時候,資料庫不用去比較null值。

資料量比較大時,合理使用分割槽表。使用partition by 子句定義每個分割槽存放的資料。在執行查詢的時候,優化器會根據分割槽定義過濾哪些沒有我們需要資料的分割槽,這樣查詢就無需掃瞄所有分割槽,只需要查詢包含需要資料的分割槽就可以了。

合理選擇儲存引擎。innodb :適合資料完整性,併發性處理,擅長更新,刪除。myisam:適合高速查詢及插入。擅長插入和查詢。

慢查詢日誌的使用,在除錯的時候開啟慢查詢,定位的慢查詢語句,再做優化策略。關閉/開啟語句 slow_query_log = 0|1   ,long_query_time = n 超過該時間臨界點,就為慢查詢。

純乾貨 MYSQL 基礎 一

select from t doctor where doctor name 布隆 分組可能不是特別好理解,我單獨舉例解釋下 假如有一張 表,和任務表,小姐姐的任務是要隨訪自己負責的病人,1個 小姐姐負責多個病人,任務表中存著所有 小姐姐,執行的所有任務。現在查一下,每個 小姐姐,各自做了多少次任務...

MySQL索引(純筆記乾貨)

結構預設為b 樹,少部分為hash桶 有聚集索引,非聚集索引之分 加索引後查詢效率變快 但是為了維護b 樹的穩定,增刪改會變慢 主鍵索引為聚集索引,聚集索引只有乙個,索引鍵值的邏輯順序和物理順序一致 非聚集索引和聚集索引一樣,採用b 樹作為索引,每次給字段建立一條索引,欄位中的資料就會被複製出來乙份...

Mysql優化方案

client 客戶端編碼方式,最好和服務端儲存一致 loose default character set utf8 mysqld 埠port 3306 mysql根目錄 basedir d ide mysql 5.6.25 winx64 資料檔案存放目錄 datadir d ide mysql 5...