Pengetahuan tingkat rendah saya tentang SQL (Server 2008) terbatas, dan sekarang sedang ditantang oleh DBA kami. Izinkan saya menjelaskan (saya telah menyebutkan pernyataan yang jelas dengan harapan saya benar, tetapi jika Anda melihat sesuatu yang salah, tolong beri tahu saya) skenarionya:
Kami memiliki meja yang berisi 'Perintah Pengadilan' untuk orang-orang. Ketika saya membuat tabel, (Name: CourtOrder), saya membuatnya seperti:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Saya kemudian menerapkan indeks non-cluster ke kunci utama (untuk efisiensi). Alasan saya adalah bahwa ini adalah bidang unik (kunci utama), dan harus diindeks, terutama untuk tujuan pemilihan, seperti yang sering kita lakukan.Select from table where primary key = ...
Saya kemudian menerapkan indeks CLUSTERED di PersonId. Alasannya adalah mengelompokkan pesanan untuk orang tertentu secara fisik, karena sebagian besar pekerjaan mendapatkan pesanan untuk seseorang. Begitu,select from mytable where personId = ...
Saya telah ditarik sekarang. Saya telah diberitahu bahwa kita harus meletakkan indeks berkerumun pada kunci utama, dan indeks normal pada personId. Itu tampak sangat aneh bagiku. Pertama, mengapa Anda menempatkan indeks berkerumun di kolom unik? apa itu pengelompokan? Tentunya itu hanya pemborosan dari clustered index? Saya percaya indeks normal akan digunakan pada kolom unik. Juga, mengelompokkan indeks berarti kita tidak dapat mengelompokkan kolom yang berbeda (Satu per tabel, kan?).
Alasan saya diberi tahu bahwa saya telah melakukan kesalahan adalah karena mereka percaya bahwa menempatkan indeks berkerumun di PersonId akan membuat penyisipan menjadi lambat. Untuk peningkatan 5% dalam kecepatan pemilihan, kami akan mendapatkan penurunan 95% dalam kecepatan pada penyisipan dan pembaruan. Apakah itu benar dan valid?
Mereka mengatakan bahwa karena kita mengelompokkan personId, SQL Server harus mengatur ulang data setiap kali kita memasukkan atau membuat perubahan ke PersonId.
Jadi saya bertanya, mengapa SQL memiliki konsep CLUSTERED INDEX, jika sangat lambat? Apakah itu selambat yang mereka katakan? Bagaimana saya harus mengatur indeks saya untuk mencapai kinerja yang optimal? Saya mengira SELECT digunakan lebih dari INSERT ... tetapi mereka mengatakan bahwa kami mengalami masalah penguncian pada INSERTS ...
Semoga seseorang bisa membantu saya.