Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL để tìm các chỉ mục dự phòng

Có những tình huống mà phần dư thừa không giữ được. Ví dụ:nói ColumnC là một cánh đồng lớn, nhưng đôi khi bạn phải lấy nó nhanh chóng. index 1 sẽ không yêu cầu tra cứu khóa cho:

select ColumnC from YourTable where ColumnnA = 12

Mặt khác, index 2 nhỏ hơn nhiều, vì vậy nó có thể được đọc trong bộ nhớ cho các truy vấn yêu cầu quét chỉ mục:

select * from YourTable where ColumnnA like '%hello%'

Vì vậy, chúng không thực sự thừa.

Nếu bạn không bị thuyết phục bởi lập luận ở trên của tôi, bạn có thể tìm thấy các chỉ mục "thừa" như:

;with ind as (
    select  a.object_id
    ,       a.index_id
    ,       cast(col_list.list as varchar(max)) as list
    from    (
            select  distinct object_id
            ,       index_id
            from    sys.index_columns
            ) a
    cross apply
            (
            select  cast(column_id as varchar(16)) + ',' as [text()]
            from    sys.index_columns b
            where   a.object_id = b.object_id
                    and a.index_id = b.index_id
            for xml path(''), type
            ) col_list (list)
)
select  object_name(a.object_id) as TableName
,       asi.name as FatherIndex
,       bsi.name as RedundantIndex
from    ind a
join    sys.sysindexes asi
on      asi.id = a.object_id
        and asi.indid = a.index_id
join    ind b
on      a.object_id = b.object_id
        and a.object_id = b.object_id
        and len(a.list) > len(b.list)
        and left(a.list, LEN(b.list)) = b.list
join    sys.sysindexes bsi
on      bsi.id = b.object_id
        and bsi.indid = b.index_id

Mang bánh đến cho người dùng của bạn trong trường hợp hiệu suất giảm "bất ngờ" :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2005 xoay vòng trên số cột không xác định

  2. Thực thi Truy vấn động với go in sql

  3. Cách đặt tùy chọn maxrecursion cho một CTE bên trong một Table-Valued-Function

  4. 4 cách để kiểm tra xem một bảng có tồn tại hay không trước khi loại bỏ nó trong SQL Server (T-SQL)

  5. Câu lệnh select lồng nhau trong SQL Server