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

Apakah ada cara untuk menyederhanakan perbandingan NULL dari 2 nilai

Ya, Anda bisa, dan Anda juga bisa membuat pengoptimal mengenalinya.

Paul White memiliki lagu kecil ini :

WHERE NOT EXISTS (
    SELECT d.[Data]
    INTERSECT
    SELECT i.[Data])

Ini berfungsi karena semantik INTERSECT yang berurusan dengan nol. Apa yang dikatakan di sini adalah "apakah tidak baris dalam subquery yang terdiri dari nilai B dan nilai B", ini hanya akan dipenuhi jika keduanya adalah nilai yang berbeda atau salah satunya adalah nol dan yang lainnya tidak. Jika keduanya nol, akan ada baris dengan nol.

Jika Anda memeriksa paket kueri XML (bukan yang grafis di SSMS), Anda akan melihat bahwa paket tersebut dikompilasi hingga d.[Data] <> i.[Data] , tetapi operator yang digunakannya akan memiliki CompareOp="IS" dan bukan EQ .

Lihat paket lengkapnya di sini .

Bagian yang relevan dari rencana tersebut adalah:

                <Predicate>
                  <ScalarOperator ScalarString="@t1.[i] as [t1].[i] = @t2.[i] as [t2].[i]">
                    <Compare CompareOp="IS">
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Table="@t1" Alias="[t1]" Column="i" />
                        </Identifier>
                      </ScalarOperator>
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Table="@t2" Alias="[t2]" Column="i" />
                        </Identifier>
                      </ScalarOperator>
                    </Compare>
                  </ScalarOperator>
                </Predicate>

Saya menemukan pengoptimal bekerja dengan sangat baik seperti ini, daripada melakukan EXISTS / EXCEPT .

Saya mendorong Anda untuk memilih Umpan Balik Azure untuk menerapkan operator yang tepat



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara melakukan pencarian peka huruf besar-kecil di klausa WHERE (saya menggunakan SQL Server)?

  2. Parsing nama file dan path dari path lengkap

  3. Pernyataan SQL - Bagaimana Meningkatkan kecepatan dengan pengindeksan

  4. bantuan pemicu server sql - pembaruan tabel yang sama

  5. Internal dari Tujuh Jenis SQL Server – Bagian 1