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

Как мога да ускоря MySQL заявката с множество обединявания

Бих пробвал следното:

Първо, уверете се, че има индекси в следните таблици и колони (всеки набор от колони в скоби трябва да е отделен индекс):

table1 : (subscribe, CDate)
         (CU_id)
table2 : (O_cid)
         (O_ref)
table3 : (I_oref)
         (I_pid)
table4 : (P_id)
         (P_cat)
table5 : (C_id, store)

Второ,ако добавянето на горните индекси не подобри нещата толкова, колкото бихте искали, опитайте да пренапишете заявката като

SELECT DISTINCT t1.first_name, t1.last_name, t1.email FROM
  (SELECT CU_id, t1.first_name, t1.last_name, t1.email
     FROM table1
     WHERE subscribe = 1 AND
           CDate >= $startDate AND
           CDate <= $endDate) AS t1
  INNER JOIN table2 AS t2
    ON t1.CU_id = t2.O_cid   
  INNER JOIN table3 AS t3
    ON t2.O_ref = t3.I_oref   
  INNER JOIN table4 AS t4
    ON t3.I_pid = t4.P_id   
  INNER JOIN (SELECT C_id FROM table5 WHERE store = 2) AS t5
    ON t4.P_cat = t5.C_id

Тук се надявам, че първият под-селекция ще намали значително броя на редовете, които трябва да бъдат взети предвид за присъединяване, да се надяваме, че следващите обединения ще свършат по-малко работа. Същото се отнася и за мотивите зад втория под-селекция на таблица 5.

Във всеки случай се забърквайте с него. Искам да кажа, в крайна сметка това е просто SELECT - не можете да нараните нищо с него. Разгледайте плановете, генерирани от всяка различна пермутация, и се опитайте да разберете кое е добро или лошо за всеки.

Споделете и се насладете.



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

  2. Преместване на сайта на Wordpress към Docker:Грешка при установяване на DB връзка

  3. Възможно ли е да се посочи една колона като множество външни ключове?

  4. местоположение на директорията с данни на mysql

  5. Изберете заявка, но покажете резултата от запис номер 3