SELECT * FROM table или SELECT field1, field2..

5 отговора 981 прегледа
#1

SELECT * FROM table или SELECT field1, field2..

Здравейте,

интересува ме има ли разлика в скоростта при долните заявки,
db - mysql


случай 1)
= SELECT * FROM table или
= SELECT field1, field2, fieldN FROM table

случай 2)
= SELECT t1.*, t2.* FROM table1 t1, table2 t2 WHERE t1.id = t2.id или
= SELECT t1.field1, t1.field2..., t2.field1, t2.field2... FROM table1 t1, table2 t2 WHERE t1.id = t2.id

Отговор
в отговор на нaчинaeщ #2

Re: SELECT * FROM table или SELECT field1, field2..

Зависи как е написана базата... по принцип може да има малко разлика в скоростта на интерпретиране на израза (заявката)

Отговор
в отговор на нaчинaeщ #3

Re: В скоростта няма разлика. Обаче ...

По отношение на бързодайствието няма никаков значение дали изписваш всички колонки или *

Има голямо значение от гледна точка на дизайн, разработка, поддържане ...

Звездичката е лошо нещо защото "крие" структурата. Достатъчно е да погледнем твоя пример:

= SELECT * FROM table или
= SELECT field1, field2, fieldN FROM table

Въпрос 1: Колко колонки ще съдържат резултатите от тези заявки?
При втората е ясно - 3. А първата?

Въпрос 2: Какви колонки ще съдържат резултатите от тези заявки?

А в какъв ред?

Явното указване на колонките добавя едно ниво на абстракция от което има само полза. Може по някаква причина да се добавят или махнат колонки или пък да се пренаредят. А тогава всички програми коите използват SELECT * трябва да се пренаписват ...

salle.online.bg/sig
Отговор
в отговор на нaчинaeщ #4

Re: SELECT * FROM table или SELECT field1, field2..

Струва ми се, че заявката със * би трябвало да е маааалко по-бърза, тъй като броят на дисковите премествания (disk seeks) е по-малък, но пък изискваш заемането на повече излишна памет. Обаче разликата в скоростите вероятно е толкова малка, че не си струва да пишеш такива "объркващи" заявки - добрият стил изисква да "питаш" базата точно за това, което ти трябва. Дори и да ти трябват всички полета от даден ред, пак е по-добре да ги изредиш едно по едно, отколкото със *.

Everything louder than everything else...
Отговор
в отговор на Dakota #5

Re: SELECT * FROM table или SELECT field1, field2..

А на мен ми се струва, че трябва преди да се селектнат данните, да се изчетат всички полета (имената им), което пък забавя малко.

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #6

Re: SELECT * FROM table или SELECT field1, field2.

root@ro6avia#chmod +x /bin/seek_and_destroy

Отговор