繁体   English   中英

如何检查数据库中索引的内容?

[英]How to check contents of an index in a database?

有什么方法可以查看这些索引中存储的内容吗?

我理解下面提到的查询列出了所有架构索引及其详细信息:

SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';

(摘自 Mark Byers 在 MySQL 中对 How to see indexes for a database or table 的回应?

我只会回答 MySQL,因为PostgreSQL 的 information_schema没有名为statistics的表。

SELECT <column> FROM <table>显示索引的值。 换句话说,索引的节点正是为其创建索引的列中的值。

如果您想查看索引数据结构本身,MySQL 不提供对此的访问权限。 这取决于表的存储引擎。

InnoDB 专家 Jeremy Cole 开发了一些工具,可以检查索引页的内部结构。 有关此主题的博客,请参阅https://blog.jcole.us/innodb/ ,有关他的工具,请参阅 https ://github.com/jeremycole/innodb_ruby

您可以使用您提到的查询来检索索引列表及其特定模式的详细信息。 您还可以使用以下查询来获取有关特定索引的更多详细信息:

SHOW INDEX FROM your_table_name WHERE Key_name = 'your_index_name';

此查询应返回有关指定索引的以下信息:

Non_unique:索引是否唯一 Key_name:索引的名称 seq_in_index:列在索引中的序号 Column_name:被索引的列的名称 Collation:被索引列的排序规则索引列中的唯一值 Sub_part:列的索引前缀的长度 Packed:关于索引的 packed state 的信息 Null:索引列是否可以包含 NULL 值 Index_type:索引的类型 Comment:关于索引的附加信息

您还可以使用以下查询获取特定模式中所有表的索引:

SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE TABLE_SCHEMA = 'your_schema'
ORDER BY TABLE_NAME, INDEX_NAME;

这应该为您提供索引所在的表名、索引名和列名。

您还可以使用以下查询获取特定模式中所有表的索引并查看索引中的列

SELECT t.table_name,i.index_name, group_concat(i.column_name) as columns
FROM information_schema.statistics i
JOIN information_schema.tables t on t.table_name = i.table_name
WHERE i.table_schema = 'your_schema'
GROUP BY i.table_name,i.index_name
ORDER BY t.table_name,i.index_name;

这应该为您提供表名、索引名和索引所在的列。

在任何情况下,您都应该将“your_schema”替换为您想要获取其信息的模式的名称,并将“your_table_name”替换为您想要获取其信息的表的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM