Tôi đang cố gắng để có được thông tin về các chỉ mục. Theo một số trang web, truy vấn TSQL dưới đây sẽ tham gia thông tin về các chỉ mục vào bảng chỉ mục, trả về các chỉ mục và thông tin liên quan. Truy vấn dưới đây được đơn giản hóa để tham gia trần, vì hiện tại tôi đang cố gắng trả lại dữ liệu và sau đó, tôi sẽ trả về những gì tôi cần:
SELECT *
FROM sys.indexes i
INNER JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Truy vấn này không trả về gì cả. Tuy nhiên, trong một số cơ sở dữ liệu có hàng trăm bảng có ít nhất một chỉ mục và theo các bài viết trực tuyến khác nhau, truy vấn này sẽ trả về các chỉ mục đó (vì nó tham gia vào id đối tượng). Ngoài ra, nếu tôi cố gắng thay đổi truy vấn thành truy vấn bên dưới, nó cũng không trả về kết quả nào:
SELECT *
FROM DATABASENAME.sys.indexes i
INNER JOIN DATABASENAME.sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Tại sao truy vấn này không trả về dữ liệu?
Thêm
Nếu tôi chạy các truy vấn bên dưới, tôi sẽ nhận được dữ liệu từ cả hai SELECT
truy vấn sau:
SELECT *
FROM sys.indexes
SELECT *
FROM sys.dm_db_index_usage_stats
Vấn đề (trên truy vấn ban đầu) là object_id
tham gia. Tuy nhiên, tôi không biết tại sao tôi có các đối tượng trong một bảng không tồn tại trong một bảng khác.
Cuối cùng: Martin đã có câu trả lời đúng ban đầu - mặc dù dữ liệu được trả về từ sys.dm_db_index_usage_stats
bảng, nó nằm trên msdb
cơ sở dữ liệu, không phải cơ sở dữ liệu cụ thể mà tôi đang tìm kiếm. Tôi chạy lại các truy vấn trên các bảng và tìm thấy id cơ sở dữ liệu trong bảng. Không chắc chắn lý do tại sao sys.dm_db_index_usage_stats
bảng không giữ lại dữ liệu từ các truy vấn trước đó trên cơ sở dữ liệu đó.