За да отговорите на въпроса си, той трябва да бъде разглобен малко:
SELECT *
има 3 основни вида недостатъци:
- Поддръжка на кода:използването на SELECT * намалява четливостта за сложни таблици/заявки и може да причини проблеми, когато клиентско приложение очаква определен резултат от заявка, но таблицата се променя
- Ефективност на мрежата:използването на SELECT * при връщане на резултати към клиентско приложение означава, че всички колони ще бъдат върнати на клиента; ако само някои от тези колони се използват от клиента, тогава честотната лента се губи и приложението работи по-бавно, отколкото би могло.
- Ефективност на индексиране/план за заявка:При някои обстоятелства, ако имате заявка, която наистина трябва да върне само колоните, които участват в индекс, но вместо това вие ги връщате всичките, тогава можете да получите много по-лоши планове за заявки, създадени от двигател.
Не съм сигурен какво имате предвид под „импликация относно тълкуването на заместващи знаци“, но подозирам, че не разбирате защо SELECT * е лоша идея - SQL машината така или иначе валидира предоставените колони; цената на "разширяването" на заместващия знак е по същество 0.
Съхранената процедура всъщност не е „компилирана единица код“:планът на заявката за съхранена процедура обикновено ще бъде кеширан след първото й изпълнение, но същото всъщност важи и за ad-hoc SQL изрази също в много/повечето обстоятелства.
Сега, за да отговоря на въпроса ви:Да , всички недостатъци на използването на SELECT *
в ad-hoc SQL също се прилага, еднакво, към SQL вътре в съхранена процедура.