2013-11-24 4 views
0

то, что всегда был на мой взгляд, но я никогда не спрашивал: Когда я строить запросы, я всегда использую все префиксы возможно (например, Database.Table или table.column):Использует ли Table.Column производительность?

SELECT `User`.`ID` FROM `Shop`.`User` WHERE `User`.`Name` = "David" LIMIT 1 ; 

вместо того, чтобы просто

SELECT `ID` FROM `User` WHERE `Name` = "David" LIMIT 1 ; 

Я не знаю почему, но всегда было на мой взгляд, что если вы используете префиксы, это увеличит производительность запроса.

Это правда или просто миф, который у меня на протяжении многих лет на уме?

Спасибо, ребята.

+0

См. Http://stackoverflow.com/questions/3180375/select-vs-select-column –

+0

Спасибо за ссылку, однако, я не вижу, как это относится к моей проблеме. – user3028963

+0

Это выглядит актуально: http://stackoverflow.com/questions/17904642/does-using-fully-qualified-names-affect-performace –

ответ

0

Вы должны проверить его самостоятельно.

Ответ, который вы найдете, - нет (кроме размера запроса, отправляемого в базу данных). Использование квалификатора table.column обычно используется при использовании более чем одной таблицы в запросе для предотвращения неоднозначности.

Например, если вы объединения двух таблиц, которые содержат как столбец с именем userId, вы бы псевдоним столбца:

SELECT a.`userId` 
FROM `user` a 
LEFT JOIN `email` b 
    ON b.`userId` = a.`userId` 

Если бы вы были только SELECT userId, вы получите this error.

+0

Я согласен: квалификатор таблицы требуется, когда есть двусмысленность. Однако даже при отсутствии двусмысленности серверу придется разрешать таблицу каждого столбца. Эта операция не должна добавлять никаких измеримых накладных расходов, поскольку информация о схеме почти всегда кэшируется (в зависимости от поставщика). Помимо этого, добавление квалификаторов, несомненно, улучшит читаемость кода. – Cascader

Смежные вопросы