[转帖]如何查看数据库索引的利用率?

如何,查看,数据库,索引,利用率 · 浏览次数 : 0

小编点评

**MySQL** ```sql SELECT t.TABLE_SCHEMA, t.TABLE_NAME, INDEX_NAME, CARDINALITY, TABLE_ROWS, CARDINALITY / TABLE_ROWS AS SELECTIVITY FROM information_schema.TABLES t, (SELECT table_schema, table_name, index_name, cardinality FROM information_schema.STATISTICS WHERE ( table_schema, table_name, index_name, seq_in_index ) IN (SELECT table_schema, table_name, index_name, MAX(seq_in_index) FROM information_schema.STATISTICS GROUP BY table_schema, table_name, index_name)) s WHERE t.table_schema = s.table_schema AND t.table_name = s.table_name AND t.table_rows != 0 AND t.table_schema NOT IN ( 'mysql', 'performance_schema', 'information_schema' ) ORDER BY SELECTIVITY ; ``` **PostgreSQL** ```sql SELECT pg_stat_all_indexes.relid, pg_stat_all_indexes.indexrelid, pg_stat_all_indexes.schemaname, pg_stat_all_indexes.relname, pg_stat_all_indexes.indexrelname, pg_stat_all_indexes.idx_scan, pg_stat_all_indexes.idx_tup_read, pg_stat_all_indexes.idx_tup_fetch FROM pg_stat_all_indexes WHERE (pg_stat_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND pg_stat_all_indexes.schemaname !~ '^pg_toast'::text; ```

正文

数据库性能调优,不止是加索引,索引建多了,会导致索引数据过去庞大,也会严重影响性能。了解索引的利用率可以帮助我们更好处理垃圾索引。

 1、mysql查看索引利用率:

  1. SELECT
  2. t.TABLE_SCHEMA,
  3. t.TABLE_NAME,
  4. INDEX_NAME,
  5. CARDINALITY,
  6. TABLE_ROWS,
  7. CARDINALITY / TABLE_ROWS AS SELECTIVITY
  8. FROM
  9. information_schema.TABLES t,
  10. (SELECT
  11. table_schema,
  12. table_name,
  13. index_name,
  14. cardinality
  15. FROM
  16. information_schema.STATISTICS
  17. WHERE (
  18. table_schema,
  19. table_name,
  20. index_name,
  21. seq_in_index
  22. ) IN
  23. (SELECT
  24. table_schema,
  25. table_name,
  26. index_name,
  27. MAX(seq_in_index)
  28. FROM
  29. information_schema.STATISTICS
  30. GROUP BY table_schema,
  31. table_name,
  32. index_name)) s
  33. WHERE t.table_schema = s.table_schema
  34. AND t.table_name = s.table_name
  35. AND t.table_rows != 0
  36. AND t.table_schema NOT IN (
  37. 'mysql',
  38. 'performance_schema',
  39. 'information_schema'
  40. )
  41. ORDER BY SELECTIVITY ;
  42. -- 如果很慢把排序去掉,加上limit 并且在where条件中限定表名。cardinality越接近0,利用率越低
  43. -- 上述 SQL 语句并不能工作在 MySQL 5.6 版本下(即使最新的 MySQL 5.6.28 版本),因为目前 5.6 的 -- STATISTICS 表中关于 Cardinality 的统计是错误的

2、postgresql查看索引利用率:

  1. SELECT pg_stat_all_indexes.relid,
  2. pg_stat_all_indexes.indexrelid,
  3. pg_stat_all_indexes.schemaname,
  4. pg_stat_all_indexes.relname,
  5. pg_stat_all_indexes.indexrelname,
  6. pg_stat_all_indexes.idx_scan,
  7. pg_stat_all_indexes.idx_tup_read,
  8. pg_stat_all_indexes.idx_tup_fetch
  9. FROM pg_stat_all_indexes
  10. WHERE (pg_stat_all_indexes.schemaname <> ALL (ARRAY['pg_catalog'::name, 'information_schema'::name])) AND pg_stat_all_indexes.schemaname !~ '^pg_toast'::text;
  11. -- 可以在where条件中限定表名

总结:这个真的非常方遍,特别是定位大数据量多时候,pgsql还会出现一些包括内存溢出之类的错误

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树数据库组成37915 人正在系统学习中

与[转帖]如何查看数据库索引的利用率?相似的内容:

[转帖]如何查看数据库索引的利用率?

数据库性能调优,不止是加索引,索引建多了,会导致索引数据过去庞大,也会严重影响性能。了解索引的利用率可以帮助我们更好处理垃圾索引。 1、mysql查看索引利用率: SELECT t.TABLE_SCHEMA, t.TABLE_NAME, INDEX_NAME, CARDINALITY, TABLE_

[转帖]人大金仓数据库的用户与角色

数据库的表、索引、视图等,在数据库中的一切都可以称为数据库对象。 对象分为以下两类 模式(SCHEMA)对象:可视为一个表的集合,可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象。如数据库、表空间、用户、权限。 查看当前用户在数据库中拥有的权限 \l 查

【转帖】MySQL索引

数据表如何用索引快速查找 索引是 排好序的快速查找的数据结构 索引存储在文件系统中 索引的文件存储形式与存储引擎有关 索引数据结构:可以是二叉树、红黑树、Hash表、B-Tree、B+Tree 1、二叉树 使用索引的如下图:(如果是使用二叉树结构)每一个节点都存放数据行的磁盘地址【快速定位到数据】

[转帖]Elasticsearch 技术分析(五):如何通过SQL查询Elasticsearch

https://www.cnblogs.com/jajian/p/10053504.html 前言# 这篇博文本来是想放在全系列的大概第五、六篇的时候再讲的,毕竟查询是在索引创建、索引文档数据生成和一些基本概念介绍完之后才需要的。当前面的一些知识概念全都讲解完之后再讲解查询是最好的,但是最近公司项目

[转帖]如何在KingbaseES数据库查看数据库和表的大小

关键字 kingbaseES,数据库大小,表大小 1、查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_size('kapp'); sys_database_size 1685672055(1 行记录)

[转帖]如何在KingbaseES数据库查看数据库和表的大小

关键字 kingbaseES,数据库大小,表大小 1、查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_size('kapp'); sys_database_size 1685672055(1 行记录)

[转帖]如何在KingbaseES数据库查看数据库和表的大小

关键字 kingbaseES,数据库大小,表大小 1、查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_size('kapp'); sys_database_size 1685672055(1 行记录)

[转帖]TiDB 统计数据库占用大小的N种方法

TiDB之路2022-03-06 3896 前言 TiDB 如何统计数据库占用空间大小 四种方法 方法一 TiDB 统计数据库占用大小的第一种方法是监控。通过查看 {cluster-name} - Overview,可以查看Current storage size面板,获取当前集群已用数据库空间大小

[转帖]Mysql向表中循环插入数据

如何查看MySQL的当前存储引擎 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 创建表 create table per2 (id

[转帖]harbor-db restarting问题

现象: 在安装harbor后,启动时发现harbor-db 一直是restarting,/harbor-jobservice,/harbor-core 这两是starting 状态,如下图 解决: 1.查看你的数据库的挂载目录(对应的宿主机目录)是什么,去你的harbor的安装目录,例如我的是usr