久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在mysql中對于索引使用率進行監控

144次閱讀
沒有評論

共計 2498 個字符,預計需要花費 7 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

怎么在 mysql 中對于索引使用率進行監控?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、查看當前索引使用情況

我們可以通過下面語句查詢當前索引使用情況:

怎么在 mysql 中對于索引使用率進行監控

Handler_read_first 代表讀取索引頭的次數,如果這個值很高,說明全索引掃描很多。

Handler_read_key 代表一個索引被使用的次數,如果我們新增加一個索引,可以查看 Handler_read_key 是否有增加,如果有增加,說明 sql 用到索引。

Handler_read_next 代表讀取索引的下列,一般發生 range scan。

Handler_read_prev 代表讀取索引的上列,一般發生在 ORDER BY … DESC。

Handler_read_rnd 代表在固定位置讀取行,如果這個值很高,說明對大量結果集進行了排序、進行了全表掃描、關聯查詢沒有用到合適的 KEY。

Handler_read_rnd_next 代表進行了很多表掃描,查詢性能低下。

其實比較多應用場景是當索引正在工作,Handler_read_key 的值將很高,這個值代表了一個行將索引值讀的次數,很低的值表明增加索引得到的性能改善不高,因為索引并不經常使用。

Handler_read_rnd_next 的值高則意味著查詢運行低效,并且應該建立索引補救。這個值的含義是在數據文件中讀下一行的請求數。如果正進行大量的表 掃描,Handler_read_rnd_next 的值較高,則通常說明表索引不正確或寫入的查詢沒有利用索引

2、查看索引是否被使用到

SELECT
 object_type,
 object_schema,
 object_name,
 index_name,
 count_star,
 count_read,
 COUNT_FETCH 
 PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage;

如果 read,fetch 的次數都為 0 的話,就是沒有被使用過的。

怎么在 mysql 中對于索引使用率進行監控

怎么在 mysql 中對于索引使用率進行監控

3、查看使用了哪些索引

explain 相關 sql,查看 type 表示查詢用到了那種索引類型

+-----+-------+-------+-----+--------+-------+---------+-------+
| ALL | index | range | ref | eq_ref | const | system | NULL |
+-----+-------+-------+-----+--------+-------+---------+-------+

從最好到最差依次是:

system   const   eq_ref   ref   fulltext   ref_or_null   index_merge   unique_subquery   index_subquery   range   index   ALL

system 表中只有一條記錄,一般來說只在系統表里出現。

const 表示通過一次索引查詢就查詢到了,一般對應索引列為 primarykey 或者 unique where 語句中 指定 一個常量,因為只匹配一行數據,MYSQL 能把這個查詢優化為一個常量,所以非常快。

eq_ref 唯一性索引掃描。此類型通常出現在多表的 join 查詢,對于每一個從前面的表連接的對應列,當前表的對應列具有唯一性索引,最多只有一行數據與之匹配。

ref 非唯一性索引掃描。同上,但當前表的對應列不具有唯一性索引,可能有多行數據匹配。此類型通常出現在多表的 join 查詢, 針對于非唯一或非主鍵索引, 或者是使用了 最左前綴 規則索引的查詢.

range 索引的范圍查詢。查詢索引關鍵字某個范圍的值。

index 全文索引掃描。與 all 基本相同,掃描了全文,但查詢的字段被索引包含,故不需要讀取表中數據,只需要讀取索引樹中的字段。

all 全文掃描。未使用索引,效率最低。

順便提幾個優化注意點:

1、優化 insert 語句:

1)盡量采用 insert into test values(),(),(),()…
2)如果從不同客戶插入多行,能通過使用 insert delayed 語句得到更高的速度,delayed 含義是讓 insert 語句馬上執行,其實數據都被放在內存隊列中個,并沒有真正寫入磁盤,這比每條語句分別插入快的多;low_priority 剛好相反,在所有其他用戶對表的讀寫完后才進行插入。
3)將索引文件和數據文件分在不同磁盤上存放(利用建表語句)
4)如果進行批量插入,可以增加 bulk_insert_buffer_size 變量值方法來提高速度,但是只對 MyISAM 表使用
5)當從一個文本文件裝載一個表時,使用 load data file,通常比使用 insert 快 20 倍

2、優化 group by 語句:

默認情況下,mysql 會對所有 group by 字段進行排序,這與 order by 類似。如果查詢包括 group by 但用戶想要避免排序結果的消耗,則可以指定 order by null 禁止排序。

3、優化 order by 語句:

某些情況下,mysql 可以使用一個索引滿足 order by 字句,因而不需要額外的排序。where 條件和 order by 使用相同的索引,并且 order by 的順序和索引的順序相同,并且 order by 的字段都是升序或者降序。

4、優化嵌套查詢:

mysql4.1 開始支持子查詢,但是某些情況下,子查詢可以被更有效率的 join 替代,尤其是 join 的被動表待帶有索引的時候,原因是 mysql 不需要再內存中創建臨時表來完成這個邏輯上需要兩個步驟的查詢工作。

最后提一個點:

一個表最多 16 個索引, 最大索引長度 256 字節,索引一般不明顯影響插入性能(大量小數據例外),因為建立索引的時間開銷是 O(1) 或者 O(logN)。不過太多索引也是不好的,畢竟更新之類的操作都需要去維護索引。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2498字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 保德县| 灵石县| 大石桥市| 肇庆市| 明光市| 商南县| 青龙| 吕梁市| 塘沽区| 兴城市| 离岛区| 垣曲县| 温宿县| 新野县| 广灵县| 南丰县| 绥化市| 微博| 雷山县| 石狮市| 清镇市| 肇东市| 江阴市| 岑巩县| 米易县| 龙井市| 湛江市| 会理县| 香港| 本溪| 若羌县| 博湖县| 习水县| 仙桃市| 常宁市| 石家庄市| 吉木乃县| 甘泉县| 习水县| 山阴县| 新宁县|