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

Bisakah saya mengoptimalkan kueri SELECT DISTINCT x FROM hugeTable dengan membuat indeks pada kolom x?

Ini mungkin bukan masalah pengindeksan, tetapi salah satu desain data. Normalisasi, tepatnya. Fakta bahwa Anda perlu mengkueri nilai bidang yang berbeda, dan bahkan bersedia menambahkan indeks, merupakan indikator kuat bahwa bidang tersebut harus dinormalisasi menjadi tabel terpisah dengan kunci gabungan (kecil). Kemudian nilai yang berbeda akan segera tersedia dengan memindai tabel asing pencarian yang jauh lebih kecil.

Perbarui
Sebagai solusi, Anda dapat membuat tampilan yang diindeks secara agregat oleh bidang 'berbeda'. COUNT_BIG adalah agregat yang diizinkan dalam tampilan yang diindeks:

create view vwDistinct
with schemabinding
as select x, count_big(*)
from schema.hugetable
group by x;

create clustered index cdxDistinct on vwDistinct(x);

select x from vwDistinct with (noexpand);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menambahkan AM/PM ke Nilai Waktu di SQL Server (T-SQL)

  2. Cara Mengembalikan Substring dari String di SQL Server menggunakan Fungsi SUBSTRING()

  3. Mencetak nilai saat ini dan nilai sebelumnya antara rentang tanggal

  4. cara mengakses localDB dari Layanan Windows

  5. PIVOT di sql 2005