подавляющее большинство людей поддерживает мое собственное мнение о том, что нет разницы между следующими утверждениями:
SELECT * FROM tableA WHERE EXISTS (SELECT * FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT y FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT 1 FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT NULL FROM tableB WHERE tableA.x = tableB.y)
Но сегодня я пришел лицом к лицу с противоположным утверждением, когда на нашей внутренней встрече разработчиков было высказано мнение, что select 1
- это путь, и select *
выбирает все (ненужные) данные и, следовательно, снижает производительность.
Кажется, я помню, что была какая-то старая версия Oracle или что-то там, где это было правдой, но я не могу найти ссылки на это. Итак, мне любопытно - как родилась эта практика? Откуда возник этот миф?
Добавлено: Поскольку некоторые люди настаивают на наличии доказательств того, что это действительно ложное убеждение, здесь google query, который показывает много людей, говорящих об этом. Если вы слишком ленивы, отметьте эту прямую ссылку, где один парень даже сравнивает планы выполнения, чтобы найти, что они эквивалентны.