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

Pencarian CHARINDEX vs LIKE memberikan kinerja yang sangat berbeda, mengapa?

Saya akan menjawab pertanyaan saya sendiri karena sulit untuk menemukan jawaban yang benar dan saya diarahkan ke masalah tersebut oleh keluaran Rencana Eksekusi SQL Server 2012. Seperti yang Anda lihat di pertanyaan awal - semuanya terlihat baik-baik saja di permukaan. Ini adalah SQL Server 2008.

Ketika saya menjalankan kueri yang sama pada 2012 saya mendapat peringatan di CHARINDEX pertanyaan. Masalahnya adalah - SQL Server harus melakukan konversi tipe. Address1 adalah VarChar dan kueri memiliki N'1124' yaitu Unicode atau NVarChar . Jika saya mengubah kueri ini sebagai berikut:

SELECT * 
FROM LOCAddress 
WHERE (CAST(CHARINDEX(LOWER('1124'), LOWER([Address1])) AS int)) 

Kemudian berjalan sama seperti LIKE pertanyaan. Jadi, konversi tipe yang disebabkan oleh generator Entity Framework menyebabkan kinerja yang buruk ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Front-end MS-Access tidak mengenali tanggal dari SQL Server

  2. Hanya mendapatkan Bulan dan Tahun dari SQL DATE

  3. Prosedur Tersimpan Panggilan SQL untuk setiap Baris tanpa menggunakan kursor

  4. Melewati array int ke proc tersimpan T-SQL melalui kerangka entitas

  5. Bagaimana cara mereferensikan satu CTE dua kali?