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

Клаузата MySQL IN изпълнява ли подзаявката няколко пъти?

Вашето предположение е невярно; подзаявката ще бъде изпълнена само веднъж. Причината, поради която е по-бавна от присъединяването, е, че IN не може да се възползва от индекси; той трябва да сканира своите аргументи веднъж за всеки път WHERE клаузата се оценява, тоест веднъж на ред в таблица А. Можете да оптимизирате заявката, без да използвате променливи или съхранени процедури, просто като замените IN със съединение, така:

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

Освен ако нямате нищо против да върнете всяко поле от двете таблици, трябва да изброите полетата, които искате в SELECT клауза; tableA.* , например, ще предизвика синтактична грешка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете позицията на елемент от списък в MySQL

  2. проблем с десериализиране

  3. Въпрос за дизайн на DB относно външни ключове с нула и нормализиране

  4. Spring Data Join със спецификации

  5. Две където условие за една и съща колона, използвайки група по