Tudna valaki mondani különbséget a select count (*) és a count (1) között az SQL szerveren?


Legjobb válasz

Itt már vannak jó válaszok, de sajnos némelyik téved.

Az 1 a COUNT-ban (1) csak szó szerinti állandó kifejezés, semmi köze nincs a táblázat 1. oszlopához. Ugyanazt a választ adja, mint a COUNT (*), és ugyanaz a végrehajtási terve van. A lekérdezés megszámolja a legkisebb nem fürtözött index sorait a szükséges I / O minimalizálása érdekében.

A COUNT (oszlop) (nullázhatatlan oszlop esetén) sorokat számolva találja meg a legkisebb, a Colot tartalmazó indexben, ha nem szerepel egyetlen indexben sem, akkor táblázatot kell beolvasni. Ha a Col a fürtözött kulcsban vagy indexben van, akkor ez is minden más index része, így a legkisebb nem fürtözött index kerül fürtözött tábla-vizsgálat helyett.

Ha a célzott oszlop NEM NULL, akkor COUNT (Col) megegyezik a COUNT (*) értékkel, és megint a legkisebb nem fürtözött index beolvasásával találja meg, még akkor is, ha a Col nem szerepel egyetlen indexben sem.

Ezek az utasítások különböző lekérdezések becsült végrehajtási tervein alapulnak. SQL 2014 kiszolgáló esetén a régebbi vagy újabb verziók lekérdezés-optimalizálói eltérően működhetnek. Megállapíthatja, hogy a végrehajtási tervek elsajátításával sokkal többet lehet megtudni arról, hogy miként hajtják végre a lekérdezéseket, mint azt, hogy megpróbálja kitalálni, melyik válasz pontosabb.

Válasz

A paraméter a COUNT függvény egy kifejezés, amelyet ki kell értékelni minden sorban. A COUNT függvény visszaadja azon sorok számát, amelyeknél a kifejezés kiértékeli nem null értéket. (* a speciális kifejezés, amelyet nem értékelnek, egyszerűen visszaadja a sorok számát.)

A kifejezésnek további két módosítója van: ALL és DISTINCT. Ezek határozzák meg, hogy az ismétlődéseket eldobják-e. Mivel az ALL az alapértelmezett, a példád megegyezik a számlálással (ALL 1), ami azt jelenti, hogy a duplikátumok megmaradnak.

Mivel az “1” kifejezés nem null értékűnek számít minden sorban, és mivel te nem távolítják el az ismétléseket, a COUNT (1) mindig ugyanazt a számot adja vissza, mint a COUNT (*).

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük