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

歡迎訪問 生活随笔!

生活随笔

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

数据库

【转】找到 MySQL 数据库中的不良索引

發布時間:2025/5/22 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】找到 MySQL 数据库中的不良索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了演示,首先建兩個包含不良索引的表,并弄點數據。

mysql> show create table test1/G *************************** 1. row ***************************Table: test1 Create Table: CREATE TABLE `test1` (`id` int(11) NOT NULL,`f1` int(11) DEFAULT NULL,`f2` int(11) DEFAULT NULL,`f3` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `k1` (`f1`,`id`),KEY `k2` (`id`,`f1`),KEY `k3` (`f1`),KEY `k4` (`f1`,`f3`),KEY `k5` (`f1`,`f3`,`f2`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)mysql> show create table test2/G *************************** 1. row ***************************Table: test2 Create Table: CREATE TABLE `test2` (`id1` int(11) NOT NULL DEFAULT '0',`id2` int(11) NOT NULL DEFAULT '0',`b` int(11) DEFAULT NULL,PRIMARY KEY (`id1`,`id2`),KEY `k1` (`b`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)mysql> select count(*) from test2 group by b; +----------+ | count(*) | +----------+ | 32 | | 17 | +----------+ 2 rows in set (0.00 sec)

1. 包含主鍵的索引

innodb 本身是聚簇表,每個二級索引本身就包含主鍵,類似 f1, id 的索引實際雖然沒有害處,但反映了使用者對 mysql 索引不了解。而類似 id, f1 的是多余索引,會浪費存儲空間,并影響數據更新性能。包含主鍵的索引用這樣一句 sql 就能全部找出來。

mysql> select c.*, pk from -> (select table_schema, table_name, index_name, concat('|', group_concat(column_name order by seq_in_index separator '|'), '|') cols -> from INFORMATION_SCHEMA.STATISTICS -> where index_name != 'PRIMARY' and table_schema != 'mysql'-> group by table_schema, table_name, index_name) c,-> (select table_schema, table_name, concat('|', group_concat(column_name order by seq_in_index separator '|'), '|') pk -> from INFORMATION_SCHEMA.STATISTICS -> where index_name = 'PRIMARY' and table_schema != 'mysql'-> group by table_schema, table_name) p -> where c.table_name = p.table_name and c.table_schema = p.table_schema and c.cols like concat('%', pk, '%'); +--------------+------------+------------+---------+------+ | table_schema | table_name | index_name | cols | pk | +--------------+------------+------------+---------+------+ | test | test1 | k1 | |f1|id| | |id| | | test | test1 | k2 | |id|f1| | |id| | +--------------+------------+------------+---------+------+ 2 rows in set (0.04 sec)

2. 重復索引前綴

包含重復前綴的索引,索引能由另一個包含該前綴的索引完全代替,是多余索引。多余的索引會浪費存儲空間,并影響數據更新性能。這樣的索引同樣用一句 sql 可以找出來。

mysql> select c1.table_schema, c1.table_name, c1.index_name,c1.cols,c2.index_name, c2.cols from-> (select table_schema, table_name, index_name, concat('|', group_concat(column_name order by seq_in_index separator '|'), '|') cols -> from INFORMATION_SCHEMA.STATISTICS -> where table_schema != 'mysql' and index_name!='PRIMARY'-> group by table_schema,table_name,index_name) c1, -> (select table_schema, table_name,index_name, concat('|', group_concat(column_name order by seq_in_index separator '|'), '|') cols -> from INFORMATION_SCHEMA.STATISTICS -> where table_schema != 'mysql' and index_name != 'PRIMARY'-> group by table_schema, table_name, index_name) c2 -> where c1.table_name = c2.table_name and c1.table_schema = c2.table_schema and c1.cols like concat(c2.cols, '%') and c1.index_name != c2.index_name; +--------------+------------+------------+------------+------------+---------+ | table_schema | table_name | index_name | cols | index_name | cols | +--------------+------------+------------+------------+------------+---------+ | test | test1 | k1 | |f1|id| | k3 | |f1| | | test | test1 | k4 | |f1|f3| | k3 | |f1| | | test | test1 | k5 | |f1|f3|f2| | k3 | |f1| | | test | test1 | k5 | |f1|f3|f2| | k4 | |f1|f3| | +--------------+------------+------------+------------+------------+---------+ 4 rows in set (0.02 sec)

3. 低區分度索引

這樣的索引由于仍然會掃描大量記錄,在實際查詢時通常會被忽略。但是在某些情況下仍然是有用的。因此需要根據實際情況進一步分析。這里是區分度小于 10% 的索引,可以根據需要調整參數。

mysql> select p.table_schema, p.table_name, c.index_name, c.car, p.car total from-> (select table_schema, table_name, index_name, max(cardinality) car-> from INFORMATION_SCHEMA.STATISTICS-> where index_name != 'PRIMARY'-> group by table_schema, table_name,index_name) c,-> (select table_schema, table_name, max(cardinality) car-> from INFORMATION_SCHEMA.STATISTICS-> where index_name = 'PRIMARY' and table_schema != 'mysql'-> group by table_schema,table_name) p-> where c.table_name = p.table_name and c.table_schema = p.table_schema and p.car > 0 and c.car / p.car < 0.1; +--------------+------------+------------+------+-------+ | table_schema | table_name | index_name | car | total | +--------------+------------+------------+------+-------+ | test | test2 | k1 | 4 | 49 | +--------------+------------+------------+------+-------+ 1 row in set (0.04 sec)

4. 復合主鍵

由于 innodb 是聚簇表,每個二級索引都會包含主鍵值。復合主鍵會造成二級索引龐大,而影響二級索引查詢性能,并影響更新性能。同樣需要根據實際情況進一步分析。

mysql> select table_schema, table_name, group_concat(column_name order by seq_in_index separator ',') cols, max(seq_in_index) len-> from INFORMATION_SCHEMA.STATISTICS-> where index_name = 'PRIMARY' and table_schema != 'mysql'-> group by table_schema, table_name having len>1; +--------------+------------+-----------------------------------+------+ | table_schema | table_name | cols | len | +--------------+------------+-----------------------------------+------+ | test | test2 | id1,id2 | 2 | +--------------+------------+-----------------------------------+------+ 1 rows in set (0.01 sec)

原帖地址:http://www.codeceo.com/article/find-mysql-bad-index.html

轉載于:https://www.cnblogs.com/kzcdqbz/p/4753657.html

總結

以上是生活随笔為你收集整理的【转】找到 MySQL 数据库中的不良索引的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本大奶子视频 | 亚洲国产视频一区二区三区 | www日韩视频 | 久射网 | 国产又猛又黄又爽 | 告诉我真相俄剧在线观看 | 亚洲色图美腿丝袜 | 99热这里只有精品久久 | av免费网站 | 小视频在线观看 | 日韩av大片 | 欧美老少做受xxxx高潮 | 亚洲精品国产精品乱码 | 中文字幕一级二级三级 | 东方影库av| 四虎成人在线观看 | 国产美女91呻吟求 | 66精品| 99中文字幕在线观看 | 色婷婷丁香 | 四虎国产精品永久免费观看视频 | 国产精品久久久免费视频 | 精产国品一区二区三区 | 国产无码精品在线观看 | 精品91久久久久久 | 午夜精品无码一区二区三区 | 日本高清有码视频 | babes性欧美69 | 欧美三级小说 | 免费在线黄 | 国产aⅴ无码片毛片一级一区2 | 国产一区二区三区中文字幕 | 日本一级淫片免费放 | 日本在线网址 | 污污在线免费观看 | 黄色网址你懂的 | 日韩精品一区二区不卡 | 欧美第一页 | 德国性猛交xxxxhd | 国产精品粉嫩 | 秘密基地免费观看完整版中文 | 色婷婷yy | 五月天国产在线 | 在线视频免费观看你懂的 | 中文字幕在线观看三区 | 成人福利网站在线观看 | 91精品国产自产91精品 | 日本老小玩hd老少配 | 欧美gv在线| 午夜寂寞视频 | 国精产品一区二区 | 在线视频日韩 | 中文字幕一区三区 | 岛国精品一区二区三区 | 国产超碰人人模人人爽人人添 | 99riav国产精品视频 | 韩国黄色大片 | 国产乱真实合集 | 1024中文字幕 | 精品国产乱码久久久久 | 羞羞草影院| 午夜做爰xxxⅹ性高湖视频美国 | www.av小说 | 91久久人澡人人添人人爽欧美 | 欧美日韩久久久久 | 国产视频第一区 | av在线免| 熟女视频一区二区三区 | 欧美日韩一区二区三区在线观看 | 国产在线观看中文字幕 | 在线看成人 | 九九久久精品视频 | 久久久午夜视频 | 国产黄色视 | 极品毛片 | 影音先锋成人 | 26uuu成人网 国产精品久久久久久久久久直播 | japanese国产在线观看 | 成人做爰69片免费观看 | 黄站在线观看 | 亚洲高清免费观看 | 少妇久久久久久久久久 | 色噜噜日韩精品欧美一区二区 | 国产不卡网 | 色哟哟在线观看 | 美女网站黄页 | 久久综合亚洲色hezyo国产 | 黄页av | 国产精品久久久91 | 亚洲精品无码永久在线观看 | 综合色婷婷| 亚洲最新 | 日韩精品一区二区三区在线视频 | 日韩一级免费视频 | 成年人看的免费视频 | av导航网站 | 高清一区二区视频 | 超碰黑丝 | 中文字幕不卡在线 |