Làm thế nào để xem các chỉ mục cho cơ sở dữ liệu hoặc bảng trong MySQL?


486

Làm cách nào để xem cơ sở dữ liệu của tôi có bất kỳ chỉ mục nào trên đó không?

Làm thế nào về một bảng cụ thể?


chỉ cần sử dụng: sp_helpindex 'tên bảng'
user3772443

"chỉ sử dụng: sp_helpindex 'tên bảng'" mà đường nối là Máy chủ SQL (MSSQL) @ user3772443 không phải MySQL
Raymond Nijland

Câu trả lời:


794

Để xem chỉ mục cho một bảng cụ thể, hãy sử dụng SHOW INDEX:

SHOW INDEX FROM yourtable;

Để xem các chỉ mục cho tất cả các bảng trong một lược đồ cụ thể, bạn có thể sử dụng bảng THỐNG KÊ từ THÔNG TIN_SCHema:

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

Xóa mệnh đề where sẽ hiển thị cho bạn tất cả các chỉ mục trong tất cả các lược đồ.


10
Lưu ý rằng DISTINCTtừ khóa sẽ che dấu một số chỉ mục - Tôi có một bảng trong đó một chỉ mục có cùng tên nhưng được sử dụng trên hai cột khác nhau, vì vậy ví dụ về lược đồ thông tin ở đây sẽ chỉ hiển thị một chỉ mục.
Ben

Tôi đã phải thêm from mydbnhư thể hiện trong câu trả lời của LiorK.
Nate

@Mark Byers Có cách nào để xem bảng chỉ mục không? Làm thế nào để SQL tạo tệp chỉ mục trong nội bộ? Làm thế nào để nó lưu một con trỏ của một bản ghi từ bảng chỉ mục vào Bảng chính?
yajant b

Vì vậy, bảng của tôi hiển thị trong Information_SCHema.STATISTICS nhưng nó chỉ có một mục nhập, index_name. Không có mục bổ sung để chỉ ra tên cột. Tất cả các bảng khác có nhiều mục hiển thị giống như thế này: PRIMARY c1, c2 trong đó c1, c2 tạo thành khóa chính tổng hợp. Bất cứ ý tưởng tại sao?
Sốt

56

Nếu bạn muốn xem tất cả các chỉ mục trên tất cả các cơ sở dữ liệu cùng một lúc:

use information_schema;
SELECT * FROM statistics;

4
Như một lớp lót:SELECT * FROM information_schema.statistics;
Enharmonic


7

Bạn có thể sử dụng truy vấn này để lấy không có chỉ mục cũng như tên chỉ mục của mỗi bảng trong cơ sở dữ liệu được chỉ định.

SELECT TABLE_NAME,
       COUNT(1) index_count,
       GROUP_CONCAT(DISTINCT(index_name) SEPARATOR ',\n ') indexes
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
      AND INDEX_NAME != 'primary'
GROUP BY TABLE_NAME
ORDER BY COUNT(1) DESC;

5

Tôi đề xuất truy vấn này:

SELECT DISTINCT s.*
FROM INFORMATION_SCHEMA.STATISTICS s
LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t 
    ON t.TABLE_SCHEMA = s.TABLE_SCHEMA 
       AND t.TABLE_NAME = s.TABLE_NAME
       AND s.INDEX_NAME = t.CONSTRAINT_NAME 
WHERE 0 = 0
      AND t.CONSTRAINT_NAME IS NULL
      AND s.TABLE_SCHEMA = 'YOUR_SCHEMA_SAMPLE';

Bạn tìm thấy tất cả Chỉ mục chỉ mục.

Trân trọng.


3

Để có được tất cả các cột được lập chỉ mục cho mỗi chỉ mục trong một cột theo thứ tự trình tự.

SELECT table_name AS `Table`,
       index_name AS `Index`,
       GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE table_schema = 'sakila'
GROUP BY 1,2;

Tham chiếu: http://blog.9minutesnooze.com/mysql-inif-schema-indexes/


2

Để kiểm tra tất cả các chỉ mục bị vô hiệu hóa trên db

SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'mydb'
AND COMMENT = 'disabled'

2

Bạn có thể kiểm tra các chỉ mục của mình trong MySQL workbench.under các tab báo cáo hiệu suất mà bạn có thể thấy tất cả các chỉ mục được sử dụng và các chỉ mục không được sử dụng trên hệ thống. hoặc bạn có thể bắn truy vấn.

select * from sys.schema_index_statistics;

Paul bạn đang sử dụng công cụ nào? Mã này hoạt động trong công cụ mysql.
Ganesh Giri

Tôi đã sử dụng nó trong vỏ MySQL
Paul Basenko

Bạn có thể thử cái này bằng Mysql Workbench không. chọn * từ sys.schema_index_statistic;
Ganesh Giri

2

Điều này hoạt động trong trường hợp của tôi để lấy tên bảng và tên cột trong bảng tương ứng cho các trường được lập chỉ mục.

SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'database_name';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.