Istilah "sargable" pertama kali diperkenalkan oleh P. Griffiths Selinger et al. dalam makalah mereka tahun 1979 "Jalur Akses Seleksi dalam Sistem Manajemen Database Relasional", yang diterbitkan oleh ACM . Untuk anggota non-ACM ada salinan makalah itu di http://cs.stanford.edu/people/chrismre/cs345/rl/selinger.pdf
Istilah ini didefinisikan dalam paragraf ini:
Baik pemindaian indeks dan segmen 1 dapat secara opsional mengambil seperangkat predikat, yang disebut argumen pencarian (atau SARGS), yang diterapkan pada sebuah tuple sebelum dikembalikan ke pemanggil RSI 2 . Jika tuple memenuhi predikat, itu dikembalikan; jika tidak, pemindaian berlanjut sampai menemukan tuple yang memenuhi SARGS atau menghabiskan segmen atau kisaran nilai indeks yang ditentukan. Ini mengurangi biaya dengan menghilangkan overhead membuat panggilan RSI untuk tupel yang dapat ditolak secara efisien dalam RSS. Tidak semua predikat berbentuk yang bisa menjadi SARGS. Sebuah predikat sargable adalah salah satu bentuk (atau yang dapat dimasukkan ke dalam formulir) "kolom nilai perbandingan-operator". SARGS diekspresikan sebagai ekspresi boolean dari predikat tersebut dalam bentuk normal disjungtif.
Dengan kata lain, predikat sargable adalah sedemikian rupa sehingga dapat diselesaikan oleh mesin penyimpanan (metode akses) dengan secara langsung mengamati tabel atau catatan indeks. Sebaliknya, predikat non-sargable membutuhkan tingkat DBMS yang lebih tinggi untuk mengambil tindakan. Sebagai contoh, hasil dari WHERE lastname = 'Doe'
dapat diputuskan oleh mesin penyimpanan dengan hanya melihat isi bidang lastname
setiap catatan. Di sisi lain, WHERE UPPER(lastname) = 'DOE'
memerlukan eksekusi fungsi oleh mesin SQL, yang berarti mesin penyimpanan harus mengembalikan semua baris yang dibacanya (asalkan cocok dengan predikat lain yang mungkin, yang dapat ditagih) kembali ke mesin SQL untuk evaluasi, menimbulkan biaya CPU tambahan .
Anda dapat melihat dari definisi asli bahwa predikat sargable dapat berlaku tidak hanya untuk pemindaian indeks, tetapi juga untuk pemindaian tabel (segmen dalam terminologi Sistem R), selama syarat "perbandingan kolom-nilai operator" terpenuhi dan karenanya dapat dievaluasi oleh mesin penyimpanan. Ini memang kasus dengan Db2, keturunan Sistem R dalam banyak hal :
Predikat sargable indeks tidak digunakan untuk mengelompokkan pencarian, tetapi dievaluasi dari indeks jika dipilih, karena kolom yang terlibat dalam predikat adalah bagian dari kunci indeks. Predikat ini juga dievaluasi oleh manajer indeks.
Predikat sargable data adalah predikat yang tidak dapat dievaluasi oleh manajer indeks, tetapi dapat dievaluasi oleh Layanan Manajemen Data (DMS). Biasanya, predikat ini membutuhkan akses setiap baris dari tabel dasar. Jika perlu, DMS akan mengambil kolom yang diperlukan untuk mengevaluasi predikat,
Fakta bahwa dalam predikat SQL Server-Speak sargable hanya mereka yang dapat diselesaikan menggunakan indeks berusaha mungkin ditentukan oleh ketidakmampuan mesin penyimpanannya untuk menerapkan predikat tersebut selama scan tabel.
Predikat Sargable dan non-sargable kadang-kadang digambarkan sebagai predikat "stage 1" dan "stage 2" (ini juga berasal dari terminologi Db2 ). Predikat tahap 1 dapat dievaluasi pada tingkat terendah dari pemrosesan kueri, saat membaca tabel atau catatan indeks. Baris yang cocok dengan kondisi tahap 1, jika ada, dikirim ke tingkat berikutnya, tahap 2, evaluasi.
1 - Segmen dalam Sistem R adalah penyimpanan fisik tupel tabel; pemindaian segmen agak setara dengan pemindaian tabel di DBMS lainnya.
2 - RSI - RSS 3 Interface, antarmuka permintaan berorientasi tuple. Fungsi antarmuka yang relevan dengan diskusi ini adalah NEXT, yang mengembalikan predikat permintaan pencocokan baris berikutnya.
3 - RSS, atau Research Storage System, subsistem penyimpanan System R.