sql >> Database teknologi >  >> RDS >> Sqlserver

IsNumeric i SQL Server JOIN

Du kan ikke regne med den rækkefølge, som en database vil evaluere filtreringsudtryk i. Der er en forespørgselsoptimering, der vil evaluere din SQL og opbygge en plan for at udføre forespørgslen baseret på, hvad den opfatter vil give den bedste ydeevne .

I denne sammenhæng, IsNumeric() kan ikke bruges med et indeks, og det betyder at køre en funktion mod hver række i tabellen. Derfor vil det næsten aldrig give den bedst opfattede præstation. Sammenlign dette med SrcID > 15 udtryk, som kan matches med et indeks (hvis et findes), og er blot et enkelt operatorudtryk, selvom man ikke gør det. Det kan også bruges til at filtrere antallet af potentielle rækker ned, hvor IsNumeric() funktionen skal køre.

Du kan sandsynligvis komme uden om dette med en visning, en underforespørgsel, en CTE, en CASE-sætning eller en beregnet kolonne. Her er et CTE-eksempel:

With NumericOnly As 
(
    SELECT <columns> FROM MyTable WHERE IsNumeric(SrcID) = 1
)
SELECT <columns> FROM NumericOnly WHERE SrcID > 15

Og her er en CASE-udsagnsmulighed:

SELECT <columns> FROM MyTable WHERE CASE WHEN IsNumeric(SrcIC) = 1 THEN Cast(SrcID As Int) ELSE 0 END > 15


  1. Mysql-brugen af ​​addslashes()

  2. Godt Oracle-databaseudviklings- og administrationsværktøj på Windows

  3. Smertefuldt langsom Postgres-forespørgsel ved hjælp af WHERE på mange tilstødende rækker

  4. Rekursiv logik i PHP + MySQL