Използвайки select *
във вашия код е това, което бих нарекъл мързеливо програмиране, с няколко неприятни странични ефекта. До каква степен ще изпитате тези странични ефекти ще се различава, но никога не е положително.
Ще използвам някои от точките, вече споменати в други отговори, но не се колебайте да редактирате отговора си и да добавите още някои отрицателни точки относно използването на select *
.
-
Изпращате повече данни от SQL машината към вашия код, отколкото е необходимо, което има отрицателен ефект върху производителността.
-
Информацията, която получавате обратно, трябва да бъде поставена в променливи (например променлива за запис). Това ще отнеме повече PGA памет от необходимото.
-
Като използвате
select *
никога няма да използвате само индекс, за да извлечете желаната информация, винаги ще трябва да посетите и таблицата (при условие, че не съществува индекс, който да съдържа всички колони на таблицата). Отново с отрицателен ефект върху производителността. -
По-малко ясно за хората, поддържащи вашия код, какво е вашето намерение. Те трябва да се поровят в кода, за да забележат всички срещания на вашата променлива за запис, за да разберат какво се извлича.
-
Няма да използвате SQL функции за извършване на изчисления, но винаги разчитайте на PL/SQL или Java изчисления. Вероятно пропускате някои страхотни подобрения на SQL като аналитични функции, моделна клауза, рекурсивно факторизиране на подзаявки и други подобни.
-
От Oracle11 нататък зависимостите се проследяват на ниво колона, което означава, че когато използвате
select *
, вашият код е маркиран в речника на данните като „зависим от всички колони“ на тази таблица. Вашата процедура ще бъде анулирана, когато нещо се случи с една от тези колони. Така че използването на select * означава, че вашият код ще бъде невалиден по-често, отколкото е необходимо.
Отново можете да добавите свои собствени точки.