sql >> Databáze >  >> RDS >> Sqlserver

IsNumeric v SQL Server JOIN

Nemůžete počítat s pořadím, ve kterém bude databáze vyhodnocovat filtrační výrazy. Existuje optimalizátor dotazů, který vyhodnotí vaše SQL a vytvoří plán pro provedení dotazu na základě toho, co podle něj přinese nejlepší výkon .

V tomto kontextu IsNumeric() nelze použít s indexem a znamená to spuštění funkce proti každému řádku v tabulce. Proto to téměř nikdy nebude poskytují nejlepší vnímaný výkon. Porovnejte to s SrcID > 15 výraz, který lze porovnat s indexem (pokud nějaký existuje), a je pouze jediným operátorovým výrazem, i když tomu tak není. Lze jej také použít k odfiltrování počtu potenciálních řádků, kde IsNumeric() funkce musí být spuštěna.

Pravděpodobně to můžete obejít pomocí pohledu, poddotazu, CTE, příkazu CASE nebo vypočítaného sloupce. Zde je příklad CTE:

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

A zde je možnost příkazu CASE:

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


  1. Jak se připojit k SQL Server 2008 pomocí qt?

  2. SQL SELECT SUM

  3. Jak najít chybějící datové řádky pomocí SQL?

  4. 4 Funkce pro vrácení měsíce z data v MariaDB