mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引
冗余索引和未使用索引的危害
隨著上線的業(yè)務(wù)越來越多,在MySQL數(shù)據(jù)庫中建的表也會越來越多,為提高查詢訪問速度,會創(chuàng)建相應(yīng)的索引。但是由于技術(shù)人員的水平參差不齊,業(yè)務(wù)下線,代碼邏輯變更等原因,導(dǎo)致線上數(shù)據(jù)庫會有冗余索引或者從未使用的索引存在,這些索引不僅消耗大量的磁盤空間,而且還會影響數(shù)據(jù)庫的insert,update性能,因此作為數(shù)據(jù)庫管理人員,需要及時發(fā)現(xiàn)這些冗余索引和未使用索引,并及時清理。
冗余索引和未使用索引定位
要找出線上數(shù)據(jù)庫的冗余索引和未使用索引,使用工具,會讓你事半功倍,例如percona-toolkits工具集就提供pt-duplicate-key-checker和pt-index-usage就能非常方便找出數(shù)據(jù)庫的冗余索引和未使用索引。
在MySQL5.7的版本sys模式下,schema_redundant_indexes和schema_unused_indexes兩個視圖,更方便直接的展示,個人感覺比pt-duplicate-key-checker和pt-index-usage的方便和準(zhǔn)確。
下面就來具體查看一下相關(guān)信息。
找重復(fù)索引,并提供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`在這里確認(rèn)一下,這個視圖找出來的重復(fù)index是否準(zhǔn)確,看看sbtest.sbtest1的表結(jié)構(gòu)
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三個索引確實是沖突了,系統(tǒng)建議保留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)刪除未使用索引時,需要注意一下,建議每個月都獲取一次,如果連續(xù)3個月都沒有使用,可以刪除掉。
總結(jié)
以上是生活随笔為你收集整理的mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonwx功能_python中wx
- 下一篇: java holder_java.sql