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

SQL Server - chỉ mục trên một cột được tính toán?

Giả sử bạn có các trường của mình ở định dạng sau:

00Data0007
000000Data0011
0000Data0015

, bạn có thể làm như sau:

  • Tạo một cột được tính toán:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    Điều này sẽ biến đổi các cột của bạn thành như sau:

    ataD00
    ataD000000
    ataD0000
    
  • Tạo chỉ mục trên cột đó

  • Đưa ra truy vấn này để tìm kiếm chuỗi Data :

    SELECT  *
    FROM    mytable
    WHERE   ndata LIKE N'ataD%'
            AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
    

    Điều kiện đầu tiên sẽ sử dụng một chỉ mục để lọc thô.

    Điều thứ hai sẽ đảm bảo rằng tất cả các ký tự đứng đầu (đã trở thành ký tự cuối trong cột được tính) không có gì khác ngoài số không.

Xem mục này trong blog của tôi để biết chi tiết về hiệu suất:

Cập nhật

Nếu bạn chỉ muốn có một chỉ mục trên SUBSTRING mà không cần thay đổi giản đồ của bạn, tạo chế độ xem là một tùy chọn.

CREATE VIEW v_substring75
WITH SCHEMABINDING
AS
SELECT  s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
FROM    mytable

CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)

SELECT  id, data
FROM    v_substring75
WHERE   substring75 = '12345'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy tất cả nhật ký giao dịch (chèn xóa cập nhật) cho một bảng cụ thể trong SQL Server 2008

  2. Sử dụng Web.Config để thiết lập chuỗi kết nối cơ sở dữ liệu SQL của tôi?

  3. Cú pháp nối nào tốt hơn?

  4. Cấp quyền thực thi cho người dùng trên tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu?

  5. Cách xóa các bản ghi KHÔNG VÀO