Chcete-li odpovědět na vaši otázku, je třeba ji trochu rozebrat:
SELECT *
má 3 hlavní typy nevýhod:
- Údržba kódu:použití SELECT * snižuje čitelnost složitých tabulek/dotazů a může způsobit problémy, když klientská aplikace očekává od dotazu určitý výsledek, ale tabulka se změní
- Výkon sítě:použití SELECT * při vracení výsledků do klientské aplikace znamená, že všechny sloupce budou vráceny klientovi; pokud klient používá pouze některé z těchto sloupců, dochází k plýtvání šířkou pásma a aplikace běží pomaleji, než by mohla.
- Indexování / Výkon plánu dotazů:Za určitých okolností, pokud máte dotaz, který skutečně potřebuje vrátit pouze sloupce, které se účastní indexu, ale vrátíte je všechny, můžete získat mnohem horší plány dotazů vytvořené motor.
Nejsem si jistý, co máte na mysli pod pojmem "implikace týkající se interpretace zástupných znaků", ale mám podezření, že nerozumíte tomu, proč je SELECT * špatný nápad - SQL engine stejně ověřuje poskytnuté sloupce; náklady na "rozšíření" zástupného znaku jsou v podstatě 0.
Uložená procedura není ve skutečnosti „kompilovaná jednotka kódu“:plán dotazů pro uloženou proceduru bude obvykle uložen do mezipaměti po jejím prvním spuštění, ale totéž ve skutečnosti platí pro ad-hoc příkazy SQL také v mnoha/většině případů.
A nyní, abychom skutečně odpověděli na vaši otázku:Ano , případné nevýhody použití SELECT *
v ad-hoc se SQL rovněž vztahuje na SQL uvnitř uložené procedury.