SQL-запрос - Выбор * от представления или Выбора col1, col2, … colN от представления

Назначение списка Python не работает так, как вы думаете.

Когда вы назначаете список, вы делаете это следующим образом.

my_list = [element_1, element_2, element_3, ...]

В то время как вы используете (составленный) синтаксис.

my_list = [size_of_list]

Теперь, когда вы это знаете, я верю, что вы можете еще раз повторить свой код.

11
задан Peter Mortensen 4 April 2011 в 12:52
поделиться

8 ответов

НИКОГДА НЕ ИСПОЛЬЗУЙТЕ "ВЫБОР *"!!!!

Это - кардинальное правило создания запроса!

Существует несколько причин этого. Один из которых, что, если Ваша таблица только имеет три поля на нем и Вы используете все три поля в коде, который называет запрос, существует большая возможность, что Вы будете добавлять больше полей к той таблице, когда приложение растет, и если Ваш выбор * запрос был только предназначен для возврата тех 3 полей для кода вызова, то Вы вытягиваете намного больше данных из базы данных, чем Вам нужно.

Другой причиной является производительность. В создании запроса не думайте о возможности многократного использования так же как эта молитва:

ВОЗЬМИТЕ ВСЕ, ЧТО МОЖНО СЪЕСТЬ, НО СЪЕСТЬ ВСЕ, ЧТО ВЫ БЕРЕТЕ.

37
ответ дан 3 December 2019 в 00:51
поделиться

Это - лучшая практика для выбора каждого столбца по имени. В будущем Ваша схема DB могла бы измениться для добавления столбцов, в которых Вы не будете затем нуждаться для конкретного запроса. Я рекомендовал бы выбрать каждый столбец по имени.

11
ответ дан 3 December 2019 в 00:51
поделиться

Просто для уточнения мнение, которое несколько человек уже высказали, причина Выбор *, неэффективно, то, потому что должен быть начальный вызов DB для обнаружения точно, какие поля доступны, и затем второй вызов, где запрос сделан с помощью явных столбцов.

Не стесняйтесь использовать Выбор *, когда Вы отлаживаете, выполняя случайные запросы или находитесь на ранних стадиях разработки запроса, но как только Вы знаете свои необходимые столбцы, заявляют их явно.

3
ответ дан 3 December 2019 в 00:51
поделиться

Всегда выбирайте col1, col2 и т.д. от представления. Нет никакого efficieny различия между двумя методами, о которых я знаю, но использующий "выбор *" может быть опасным. При изменении определения представления, добавляющего новые столбцы можно повредить программу с помощью "выбор *", тогда как выбор предопределенного набора столбцов (даже все они, названные), будет все еще работать.

0
ответ дан 3 December 2019 в 00:51
поделиться

При реальном выборе всех столбцов это не должно иметь никакого заметного значения, просите ли Вы * или если Вы являетесь явными. SQL-сервер проанализирует запрос тот же путь за в значительной степени то же количество времени.

0
ответ дан 3 December 2019 в 00:51
поделиться

Выберите *, плохая практика программирования. Это настолько же вероятно вызвать вещи повредиться, как это должно сохранить вещи от повреждения. Если Вы только запрашиваете одну таблицу или представление, то увеличение эффективности не может быть там (хотя возможно, если Вы не намереваетесь на самом деле использовать каждое поле). Если у Вас есть внутреннее объединение, то у Вас есть по крайней мере два поля, возвращая те же данные (объединяющие поля), и таким образом Вы тратите впустую сетевые ресурсы для передачи избыточных данных обратно приложению. Вы не заметите это сначала, но поскольку наборы результатов становятся больше и больше, у Вас скоро будет сетевой конвейер, который полон и не должен быть. Я не могу думать ни о каком экземпляре, где выбор * получает Вас что-либо. Если новый столбец добавляется, и Вы не должны переходить к коду, чтобы сделать что-то с ним, то столбец не должен быть возвращен Вашим запросом по определению. Если кто-то отбросит и воссоздаст таблицу со столбцами в другом порядке, то все Ваши запросы будут иметь информационное отображение неправильно или будут давать плохие результаты, такие как помещение цены в поле номера детали в новой записи.

Плюс он быстро для перетаскивания имен столбцов от обозревателя объектов, так, чтобы была просто чистая лень не эффективность в кодировании.

3
ответ дан 3 December 2019 в 00:51
поделиться

Я предполагаю, что все это зависит от того, что делает оптимизатор запросов.

Если я захочу получить каждую запись в строке, то я буду обычно использовать опцию "SELECT *...", так как я затем не должен волноваться, должен я изменять структуру базовой таблицы. Также, для кого-то поддерживающего код, видя "ВЫБОР *" говорит им, что этот запрос предназначается для возврата каждого столбца, тогда как список столбцов индивидуально не передает то же намерение.

0
ответ дан 3 December 2019 в 00:51
поделиться

Для производительности - смотрят на план запросов (не должно быть никакое различие).

Для пригодности для обслуживания. - всегда предоставляют cписок полей (который идет для INSERT INTO также).

0
ответ дан 3 December 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: