簡體   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