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

如何,查看,数据库,索引,利用率 · 浏览次数 : 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_

[转帖]如何在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

[转帖]深入理解mysql-第十二章 mysql查询优化-Explain 详解(下)

我们前面两章详解了Explain的各个属性,我们看到的都是mysql已经生成的执行计划,那这个执行计划的是如何生成的?我们能看到一些过程指标数据吗?实际mysql贴心为我们提供了执行计划的各项成本评估指标的以及优化器生成执行计划的整个过程的方法。 一、查看执行计划计算的成本数据 我们上边介绍的EXP

[转帖]Nginx报错404,由于请求处理时间过长

问题复现 近期部门内部有一个应用由于数据量过于庞大,或者说sql优化性能问题,导致查询全量数据时老报错nginx404,后来查看浏览器timing信息,发现其竟然时常达到可怕的2分钟十秒,抛去解决sql优化问题,这里从Nginx端的配置来说如何解决这类问题! 存在的问题 服务器处理请求时间过长,导致

[转帖]《Linux性能优化实战》笔记(三)—— CPU 上下文切换(下)

上篇介绍了三种CPU 上下文切换以及它们可能造成的问题和原因,这一篇来看看在系统中如何发现CPU 上下文切换问题。 一、 查看上下文切换情况 主要使用两个命令:vmstat以及之前用过的pidstat。 1. vmstat # 每隔5秒输出1组数据vmstat 5 procs memory swap

[转帖]如何快速查看进程/子线程堆栈

背景:分析现网问题时,有时需要快速查看某个进程/子线程堆栈调用,便于进一步分析问题,现提供几种不同获取进程堆栈方法。 实现方法: 1.使用gdb attach 调试进程,使用gdb相关cmd调试进程 # gdb -p pid 进入gdb后,可通过 (gdb)bt 查看主进程堆栈 (gdb)info