Нужно ли использовать «FETCH FIRST n ROWS ONLY» или «LIMIT» при выборе уникального идентификатора в предложении where - PullRequest
0 голосов
/ 22 марта 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

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

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

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

0 голосов
/ 22 марта 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...