Sebuah pertanyaan tentang SARGability


11

Saya hanya perlu mengkonfirmasi bahwa saya memahami sesuatu dengan benar:

Saya baru-baru ini melihat pertanyaan SO di mana pengguna memposting jawaban di Linq seperti:

from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p

Bagi mereka yang tidak terbiasa dengan Linq, saya akan mengharapkan output dari pernyataan itu (tidak diuji dalam keadilan) menjadi:

SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE() 

Saya memposting balasan untuk pepatah ini bahwa manipulasi datetime harus pada variabel (dalam hal ini GETDATE()) sehingga sebenarnya pernyataan tersebut harus mencerminkan sesuatu seperti:

SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())

Dalam balasan saya, bit yang sekarang saya tidak yakin, asumsikan sebagai berikut:

  1. Indeks tidak akan digunakan karena manipulasi kolom
  2. Paket kueri akan berbeda sebagian karena hal di atas (tidak diuji, dengan asumsi demikian)
  3. Karena hal di atas, permintaan 1 sebenarnya akan berkinerja lebih buruk daripada permintaan ke-2.

Pertanyaan saya:

Apakah saya melewatkan sesuatu dalam alasan saya? Apakah saya benar? Terakhir, apakah ada badan yang memiliki artikel bagus tentang SARGability?

Jawaban:


6
  1. benar
  2. belum tentu - itu tergantung pada apakah ada indeks yang sesuai dan apakah CBO memutuskan untuk menggunakannya. Misalnya jika tabel kecil atau statistik mengarahkan pengoptimal untuk meyakini bahwa filter akan benar untuk sebagian besar hasil, itu mungkin menganggap biaya FTS lebih rendah
  3. ini tidak dijamin - bahkan mungkin kueri ke-2 akan berkinerja lebih buruk - tetapi alasan Anda pada dasarnya sehat. Misalnya, dalam kasus tepi ketika FTS sebenarnya akan lebih cepat, CBO dapat memilih pemindaian indeks alih-alih berdasarkan perkiraan biaya yang terbaik - yang selalu hanya perkiraan saja

Sedikit googling memunculkan pertanyaan SO ini dan artikel menarik tentang SARGability ini


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.