Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server - indeks pada kolom yang dihitung?

Dengan asumsi Anda memiliki bidang Anda dalam format ini:

00Data0007
000000Data0011
0000Data0015

, Anda dapat melakukan hal berikut:

  • Buat kolom yang dihitung:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    Ini akan mengubah kolom Anda menjadi berikut:

    ataD00
    ataD000000
    ataD0000
    
  • Buat indeks pada kolom tersebut

  • Keluarkan kueri ini untuk mencari string Data :

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

    Kondisi pertama akan menggunakan indeks untuk penyaringan kasar.

    Yang kedua akan memastikan bahwa semua karakter utama (yang menjadi karakter akhir di kolom yang dihitung) tidak lain adalah nol.

Lihat entri ini di blog saya untuk detail kinerja:

Perbarui

Jika Anda hanya ingin indeks di SUBSTRING tanpa mengubah skema Anda, membuat tampilan adalah pilihan.

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. Apa cara terbaik untuk memotong tanggal di SQL Server?

  2. Bagaimana saya bisa memanggil fungsi SQL di C#?

  3. Cara Menginstal SQLOPS di Mac

  4. Ganti kemunculan pertama substring dalam string di SQL

  5. Permintaan rekursif di SQL Server