Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql съществува срещу IN -- корелирана подзаявка срещу подзаявка?

Това е RDBMS-агностичен отговор, но въпреки това може да помогне. Според мен корелираната (известна още като зависима) подзаявка е може би най-често фалшиво обвиняемият виновник за лошо представяне.

Проблемът (както най-често се описва) е, че обработва вътрешната заявка за всеки ред от външната заявка. Следователно, ако външната заявка върне 1 000 реда, а вътрешната 10 000, тогава вашата заявка трябва да премине през 10 000 000 реда (външни × вътрешни), за да даде резултат. В сравнение с 11 000 реда (външни+вътрешни) от некорелирана заявка върху същите набори от резултати, това не е добре.

Това обаче е само най-лошият сценарий. В много случаи СУБД ще може да използва индекси, за да намали драстично броя на редовете. Дори ако само вътрешната заявка може да използва индекс, 10 000 реда стават ~13 търсения, което намалява общия брой до 13 000.

exists Операторът може да спре обработката на редове след първия, намалявайки допълнително разходите за заявка, особено когато повечето външни редове съвпадат с поне един вътрешен ред.

В някои редки случаи съм виждал SQL Server 2008R2 да оптимизира корелирани подзаявки към обединяване за сливане (което преминава и двата набора само веднъж – най-добрият възможен сценарий), където подходящ индекс може да бъде намерен както във вътрешни, така и във външни заявки.

Истинският виновник за лошото представяне не е непременно корелирани подзаявки , но вложени сканирания .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Увеличете полето на базата данни с 1

  2. Използване на PHP за качване на файл и добавяне на пътя към базата данни на MySQL

  3. Какъв тип данни на MySQL трябва да се използва за географска ширина/дължина с 8 знака след десетичната запетая?

  4. Как да покажете съпоставянето на вашата връзка в MySQL

  5. защо това не изтегля данни от 7 дни назад?