Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyszukiwanie CHARINDEX vs LIKE zapewnia zupełnie inną wydajność, dlaczego?

Odpowiem na moje własne pytanie, ponieważ trudno było znaleźć poprawną odpowiedź, a problem został wskazany przez dane wyjściowe programu SQL Server 2012 Execution Plan. Jak widać w pierwotnym pytaniu - na powierzchni wszystko wygląda OK. To jest SQL Server 2008.

Gdy uruchamiam to samo zapytanie w 2012 r., otrzymuję ostrzeżenie dotyczące CHARINDEX zapytanie. Problem polega na tym, że SQL Server musiał wykonać konwersję typów. Address1 to VarChar a zapytanie ma N'1124', który jest Unicode lub NVarChar . Jeśli zmienię to zapytanie w ten sposób:

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

Następnie działa tak samo jak LIKE zapytanie. Tak więc konwersja typu spowodowana przez generator Entity Framework powodowała ten straszny spadek wydajności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak włączyć CDC w zestawie tabel LUB włączyć we wszystkich tabelach w bazie danych w programie SQL Server — samouczek dotyczący programu SQL Server

  2. Zwróć listę profili poczty bazy danych w SQL Server (T-SQL)

  3. Dlaczego drugie zapytanie T-SQL działa znacznie szybciej niż pierwsze wywołane przez Reporting Services 2005 w aplikacji internetowej?

  4. Elastyczny klucz obcy

  5. Różnica między lokalnymi i globalnymi tabelami tymczasowymi w SQL Server