Otázka: Načíst TOP 10 řádků bez použití TOP nebo LIMIT?
Odpověď: Když jsem byl položen tuto otázku v mé nedávné Komplexní kontrole výkonu databáze zeptal jsem se toho člověka, proč chce znovu vynalézt kolo. Nicméně, když jsem obdržel jeho odpověď, nyní skutečně souhlasím s odůvodněním.
Zde je důvod: Nechceme používat TOP nebo LIMIT, protože ve skutečnosti nejsou implementací ANSI. Chceme načíst horní řádky takovým způsobem, aby to mohlo fungovat napříč různými databázemi, jako je SQL Server, MySQL, MariaDB a také PostgreSQL.
Všechny databáze implementovaly svou vlastní logiku pro načtení horních řádků. SQL Server používá TOP klíčová slova, zatímco MySQL, MariaDB a PostgreSQL používají LIMIT klíčové slovo pro omezení řádků na serveru SQL. To představuje jedinečnou výzvu pro dodavatele třetích stran, kteří píší kód, který lze zapojit do jakéhokoli RDBMS. Musí psát kód s podmínkami a udržovat dvě různé verze logiky. Pokud však použijete následující metodu, bude fungovat ve všech nejnovějších verzích relačních databází.
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) AS ROWNUMFROM INFORMATION_SCHEMA.RUUTINESWHERE ROUTINE1_TYPE'='preWPROCINEEDRE_TYPE'=preTo bude fungovat se všemi známými relačními databázemi, se kterými jsem se setkal. I když rádi často používáme TOP a LIMIT, doporučujeme, abychom nadále používali logiku, která funguje ve více relačních databázích.
Zde jsou další blogové příspěvky, které by vás mohly zajímat:
- SQL SERVER – Vypnutí možnosti konfigurace serveru zvýšení priority na SSMS 18 a novější
- SQL SERVER – Ukázkový skript pro kontrolu fragmentace indexu pomocí RowCount
- Hádanka SQL – vytváření schémat a tabulek – odpověď bez spuštění kódu
- Jak zjistit, zda je index na dotaz vynucený? – Otázka týdne v rozhovoru č. 246