Должен ли я использовать «FETCH FIRST n ROWS ONLY» или «LIMIT» при выборе уникального идентификатора в предложении where

Мне было интересно, нужно ли мне использовать оператор FETCH FIRST n ROWS ONLY в DB2 или оператор LIMIT в MySQL, если я запрашиваю уникальный идентификатор с индексом из таблицы для повышения производительности. Или sql-провайдер уже замечает, что будет максимум один результат и останавливает запрос, когда строка найдена?

Пример запроса:
БД2: SELECT * FROM myTable WHERE id = 1 FETCH FIRST 1 ROWS ONLY
MySQL: SELECT * FROM myTable WHERE id = 1 LIMIT 1

Кто-нибудь уже думал об этом?

В mylsq ограничение применяется к результату выбора .. поэтому у вас нет улучшения производительности

ScaisEdge 22.03.2019 09:15

А как же FETCH FIRST 1 ROWS ONLY?

Marvin Klar 22.03.2019 09:16

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

ScaisEdge 22.03.2019 09:17

Если у вас уже есть уникальный индекс для id, то обычно оптимизатор должен знать, что такой запрос не может вернуть более одной строки. Если у вас нет такого уникального индекса на id, возможно, стоит помочь оптимизатору построить лучший план доступа.

Mark Barinstein 22.03.2019 09:20
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
4
4
5 934
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать как FETCH FIRST 1 ROWS ONLY, так и LIMIT в Db2, проверьте Параметры совместимости с DB2.

Если возвращается только одна строка, не имеет значения, указан ли этот синтаксис. Однако, если вы или система не уверены, это дополнительная защита. В зависимости от настроек оптимизатора (настроения, статистики или метаданных) дополнительный синтаксис может повысить производительность. Причина в том, что система базы данных знает, что должна быть возвращена только одна строка, и может оптимизировать ее для этого случая.

Если на я бы есть уникальный индекс, то это должно быть очевидно, но есть ли индекс...?

Да, в этой строке есть индекс. Я отредактировал вопрос. Итак, есть ли необходимость указывать оператор LIMIT?

Marvin Klar 22.03.2019 09:34

Мой ответ уже включает это. Не нужно, но я бы все равно сделал это по привычке.

data_henrik 22.03.2019 09:43

И когда вы включаете поддержку LIMIT в Db2, вы можете использовать этот более короткий синтаксис

data_henrik 22.03.2019 09:43

В случае, если атрибут объявлен уникальным, я настоятельно рекомендую не делать этого по двум причинам:

  1. это никоим образом не увеличивает производительность современного оптимизатора, а только увеличивает работу оптимизатора SQL, у которого есть еще одно предложение для обработки,

  2. (самое важное) это снижает удобочитаемость оператора для сопровождающего кода, поскольку может создаться впечатление, что атрибут не уникален, что приведет к путанице в отношении запроса и базовой таблицы.

Другие вопросы по теме