Швидкість виконання SELECT-запитів різних конструкцій

Різні СКБД по різному виконують ідентичні SELECT-запити, записані за допомогою різних конструкцій.

Наступні два запити є ідентичні за результатом

SELECT …
FROM tab1 INNER JOIN tab2 ON tab1.fld1=tab2.fld2
WHERE …;

SELECT …
FROM tab1, tab2
WHERE tab1.fld1=tab2.fld2
…;

Виявляється, Oracle 9i другий запит на порядок швидше виконує, ніж перший. Тоді як MS Access виконує їх за швидкістю з точністю до навпаки (на жаль не маю можливості поексперементувати з MS SQLServer, але припускаю такий же результат).

Незалежно від СКБД UNION-вибірки завжди виконуються довше, ніж відповідні вибірки без UNION. Наступні два запити ідентичні
SELECT …
FROM tab
WHERE tab.id=’abc’
UNION
SELECT
WHERE tab.id=’dfg’;

SELECT …
FROM tab
WHERE tab.id IN (’abc’,’dfg’);

Однак другий запит на порядок швидше виконуватиметься, ніж перший. Взагалі, рекомендую при можливості уникати UNION-вибірки, які на великих таблицях можуть суттєво завантажити сервер бази даних.

Джерело - http://pzhe.net/ua/querying_speed.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <h1> <h2> <h3> <h4> <h5> <h6> <address> <em> <strong> <code> <del> <cite> <acronym> <blockquote> <q> <sub> <p> <br> <pre> <ul> <ol> <li> <dl> <dt> <dd> <a> <b> <u> <i> <table> <tr> <td> <th> <div> <sup><hr> <img>
  • Glossary terms will be automatically marked with links to their descriptions.
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
  .d888  d8b                                8888888b.    .d8888b.   888    d8P  
d88P" Y8P 888 "Y88b d88P Y88b 888 d8P
888 888 888 Y88b. d88P 888 d8P
888888 888 88888888 888 888 .d88b. 888 888 "Y88888" 888d88K
888 888 d88P 888 888 d88P"88b 888 888 .d8P""Y8b. 8888888b
888 888 d88P 888 888 888 888 888 888 888 888 888 Y88b
888 888 d88P Y88b 888 Y88b 888 888 .d88P Y88b d88P 888 Y88b
888 888 88888888 "Y88888 "Y88888 8888888P" "Y8888P" 888 Y88b
888
Y8b d88P
"Y88P"
Enter the code depicted in ASCII art style.

© Інформаційні технології. Аналітика , Рідна Мережа