alpax писал(а):А зачем два селекта? По-моему этого будет достаточно:
SELECT 1 from transaction
WHERE Id=1
limit 1
Кстати, а "TOP #" есть только в MS SQL или это более распространенная опция? Насчет синтаксиса правда сомневаюсь - что-то типа такого:
SELECT top 1 1 FROM transaction WHERE Id=1
sobomax писал(а):select exists(select id from table where id=1 limit 1)
максим, скажи мне как геолог геологу - в плане производительности будет разница между select id и select * в вышеприведенном коде?
чисто теоретический интерес, для моих таблиц что так, что так моргнуть не успеваю
sobomax писал(а):select exists(select id from table where id=1 limit 1)
максим, скажи мне как геолог геологу - в плане производительности будет разница между select id и select * в вышеприведенном коде?
чисто теоретический интерес, для моих таблиц что так, что так моргнуть не успеваю
В моем запросе разницы большой не будет. Выбирать одно поле или несколько должно быть все равно.
Если говорит про оригинальный вопрос с count(*), в случае если по id есть индекс то заметной разницы между вариантом с count() и вариантом с exists() в принципе тоже быть не должно. Однако если результат запроса будет использоваться в более сложном селекте то exists() теоретически лучше потому что он позволит оптимизатору "понять" что именно требуется и оптимизировать запрос на более высоком уровне. В случае если там будет функция count() этот самый count() скорее всего будет для оптимизатора "черным ящиком", то есть в случае если возвращаемое значение используется в другом where или join он будет исполнен много раз снова и снова вызывая торможение.
sobomax писал(а):select exists(select id from table where id=1 limit 1)
максим, скажи мне как геолог геологу - в плане производительности будет разница между select id и select * в вышеприведенном коде?
чисто теоретический интерес, для моих таблиц что так, что так моргнуть не успеваю
В моем запросе разницы большой не будет. Выбирать одно поле или несколько должно быть все равно.
Если говорит про оригинальный вопрос с count(*), в случае если по id есть индекс то заметной разницы между вариантом с count() и вариантом с exists() в принципе тоже быть не должно. Однако если результат запроса будет использоваться в более сложном селекте то exists() теоретически лучше потому что он позволит оптимизатору "понять" что именно требуется и оптимизировать запрос на более высоком уровне. В случае если там будет функция count() этот самый count() скорее всего будет для оптимизатора "черным ящиком", то есть в случае если возвращаемое значение используется в другом where или join он будет исполнен много раз снова и снова вызывая торможение.
-Maxim
спасибо,
я и имел в виду твой вариант (он же мой , почти)
sobomax писал(а): Если говорит про оригинальный вопрос с count(*), в случае если по id есть индекс то заметной разницы между вариантом с count() и вариантом с exists() в принципе тоже быть не должно. Однако если результат запроса будет использоваться в более сложном селекте то exists() теоретически лучше потому что он позволит оптимизатору "понять" что именно требуется и оптимизировать запрос на более высоком уровне. В случае если там будет функция count() этот самый count() скорее всего будет для оптимизатора "черным ящиком", то есть в случае если возвращаемое значение используется в другом where или join он будет исполнен много раз снова и снова вызывая торможение.
-Maxim
Да здесь и сравнивать не нужно, однозначно exists будет работать оптимальнее, так как идет поиск в базе до только первой записи удовлетворяющей условию, далее идет выход true, и никаких дополнительных поисков и операций как в случае с использованием in (..) или count(*)
sobomax писал(а):select exists(select id from table where id=1 limit 1)
максим, скажи мне как геолог геологу - в плане производительности будет разница между select id и select * в вышеприведенном коде?
чисто теоретический интерес, для моих таблиц что так, что так моргнуть не успеваю
при современных оптимайзерах скорее всего нет... но(!) когда код пишет таким образом то оптимайзеру просто не оставляют выбора на "фантазию", чтобы не переоптимизировал но вообще ты прав вопрос более теоретический