日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引

發布時間:2024/7/23 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冗余索引和未使用索引的危害

隨著上線的業務越來越多,在MySQL數據庫中建的表也會越來越多,為提高查詢訪問速度,會創建相應的索引。但是由于技術人員的水平參差不齊,業務下線,代碼邏輯變更等原因,導致線上數據庫會有冗余索引或者從未使用的索引存在,這些索引不僅消耗大量的磁盤空間,而且還會影響數據庫的insert,update性能,因此作為數據庫管理人員,需要及時發現這些冗余索引和未使用索引,并及時清理。

冗余索引和未使用索引定位

要找出線上數據庫的冗余索引和未使用索引,使用工具,會讓你事半功倍,例如percona-toolkits工具集就提供pt-duplicate-key-checker和pt-index-usage就能非常方便找出數據庫的冗余索引和未使用索引。

在MySQL5.7的版本sys模式下,schema_redundant_indexes和schema_unused_indexes兩個視圖,更方便直接的展示,個人感覺比pt-duplicate-key-checker和pt-index-usage的方便和準確。

下面就來具體查看一下相關信息。

找重復索引,并提供drop index語句

mysql> select * from schema_redundant_indexesG;*************************** 1. row *************************** table_schema: sbtest table_name: sbtest1 redundant_index_name: k_1 redundant_index_columns: kredundant_index_non_unique: 1 dominant_index_name: idx_sbtest1_k dominant_index_columns: k dominant_index_non_unique: 1 subpart_exists: 0 sql_drop_index: ALTER TABLE `sbtest`.`sbtest1` DROP INDEX `k_1`*************************** 2. row *************************** table_schema: sbtest table_name: sbtest1 redundant_index_name: idx_sbtest1_id_k redundant_index_columns: id,kredundant_index_non_unique: 1 dominant_index_name: PRIMARY dominant_index_columns: id dominant_index_non_unique: 0 subpart_exists: 0 sql_drop_index: ALTER TABLE `sbtest`.`sbtest1` DROP INDEX `idx_sbtest1_id_k`

在這里確認一下,這個視圖找出來的重復index是否準確,看看sbtest.sbtest1的表結構

mysql> show create table sbtest.sbtest1G;*************************** 1. row *************************** Table: sbtest1Create Table: CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`), KEY `idx_sbtest1_id_k` (`id`,`k`), KEY `idx_sbtest1_k` (`k`)) ENGINE=InnoDB AUTO_INCREMENT=5000001 DEFAULT CHARSET=utf8 MAX_ROWS=10000001 row in set (0.00 sec)

k_1,idx_sbtest1_id_k,idx_sbtest1_k三個索引確實是沖突了,系統建議保留idx_sbtest1_k這個索引。

來定位未使用索引

mysql> select * from schema_unused_indexes;+---------------+-------------+--------------------+| object_schema | object_name | index_name |+---------------+-------------+--------------------+| sbtest | sbtest1 | k_1 || sbtest | sbtest1 | idx_sbtest1_id_k || sbtest | sbtest1 | idx_sbtest1_k || sbtest | t_pay_test | k_1 || sbtest | t_pay_test | idx_t_pay_test_k_c |+---------------+-------------+--------------------+5 rows in set (0.00 sec)

刪除未使用索引時,需要注意一下,建議每個月都獲取一次,如果連續3個月都沒有使用,可以刪除掉。

總結

以上是生活随笔為你收集整理的mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。