MySQL Tips

 

MySQL中的一些Tips,我的總結或者整理自網絡html

 

不明白爲何MySQL的不少材料中老是喜歡把聯合(複合)索引和覆蓋索引放在一塊說事?mysql

1,聯合索引是一種索引的類型,指建立索引的時候包含了多個字段。
2,覆蓋索引是一種查詢優化行爲,索引結構自己就能夠知足查詢,無需回表,而不是一種索引。
3,聯合索引和覆蓋索引並無任何須然關係,單個字段的索引也有可能會發生覆蓋索引的狀況。sql


MySQL中的filesort網絡

"using filesort" means that the sort can't be performed with an index. 僅此而已,並不必定真的使用文件完成排序。
mysql沒法利用索引完成的排序操做成爲「文件排序」 ,當須要排序,而又沒法直接經過索引直接完成排序,須要額外的操做的時候發生using filesort。
filesort只能應用在單個表上,若是有多個表的數據須要排序,那麼MySQL會先使用using temporary保存臨時數據,而後再在臨時表上使用filesort進行排序,最後輸出結果。異步


last_query_cost測試

對比MySQL不一樣寫法或者改變了索引對象以後SQL的效率的時候,彷佛只能傻傻地看執行時間以及一個粗略的執行計劃,呵呵。
IO、CPU、內存使用都看不到,而last_query_cost彷佛也不必定靠得住。
last_query_cost的單位也不是page什麼的,應該是一個綜合代價的值。
The Last_query_cost value can be computed accurately only for simple 「flat」 queries, not complex queries such as those with subqueries or UNION.
For the latter, the value is set to 0.優化

至於Profile或者performance_schema.events_stages_history_long 裏面的信息,也就是看看sending data,也是一個綜合資源消耗的時間結果。orm


Sending Datahtm

Profile或者performance_schema.events_stages_history_long 中的Sending data
「Sending data」並非單純的發送數據,而是包括「收集 + 發送 數據」,說白了就是查詢到結果返回的整個過程,MySQL裏不少命名的東西都頗有誤導性,上面還在說filesort。
而performance_schema.events_stages_history_long中的絕大部分步驟,根本沒法改變。
好比closing tables,cleaning up等等,自己就是查詢引擎的一部分消耗,跟用戶行爲無關,用戶也沒法左右其時間消耗。對象


 

中止複製

  reset slave 只是刪除了master.onfo和reply_log.info文件,複製同步信息還在,reset slave all完全地清除複製。


 

 慢查詢是否記錄因阻塞形成超過long_query_time的查詢?

  通過測試,答案是不會。慢查詢在計算「慢」的查詢的時候,是隻計算正常執行時間超出long_query_time的查詢,而不計算阻塞的時間。
  慢查詢也不會由於超時或者其餘緣由形成的失敗的查詢。

  補充:在SQL Server中,相似於用於記錄慢查詢的trace或者擴展事件,在記錄「慢查詢」的時候,是會把阻塞時間也算做「慢」以內的。


 

MySQL中的預讀

若是一個extent中的被順序讀取的page超過或者等於該參數變量的,innodb將會異步的將下一個extent讀取到buffer pool中,
由參數innodb_read_ahead_threshold來控制
好比該參數的值爲30,那麼當該extent中有30個pages 被 sequentially的讀取,則會觸發innodb linear預讀,將下一個extent讀到內存中。


 

eq_range_index_dive_limit

  MySQL中In謂詞是否用索引的閾值,MySQL 5.7 默認值是200,5.6默認值是10


 

未完待續。

相關文章
相關標籤/搜索