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

MySQL OR MATCH виси (много бавно) на множество таблици

Открих 2 неща, които драстично забавят моята заявка и ги поправих.

За да се отговори на първия проблем, имаше нужда от скоби около цялото „МАЧ СРЕЩУ ИЛИ СРЕЩУ СРЕЩУ“:

WHERE 
    b.`website_id` = %d
    AND b.`status` = %d
    AND b.`active` = %d 
    AND ( 
        MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) 
        OR MATCH ( d.`name` ) AGAINST ( '%s' IN BOOLEAN MODE )
    )

Не разбрах как да използвам EXPLAIN SELECT , но помогна доста, така че благодаря! Това намали първото число от 16076 реда до 143. След това забелязах другите два с над 23 и 25 хиляди реда. Това беше причината от този ред:

LEFT JOIN ( SELECT `product_id`, `image`, `swatch` FROM `product_images` WHERE `sequence` = 0) AS c 
    ON (a.`product_id` = c.`product_id`)

Имаше причина да правя това на първо място, която след това се промени. Когато го промених, не осъзнавах, че мога да направя нормално LEFT JOIN :

LEFT JOIN `product_images` AS c 
    ON (a.`product_id` = c.`product_id`)

Това прави последната ми заявка така:(и МНОГО по-бързо премина от 196 секунди до 0,0084 или така)

SELECT 
    a.`product_id`, a.`name`, a.`slug`, a.`description`, b.`list_price`, b.`price`, 
    c.`image`, c.`swatch`, e.`name` AS industry, 
    MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) AS relevance 
FROM 
    `products` AS a LEFT JOIN `website_products` AS b 
        ON (a.`product_id` = b.`product_id`) 
    LEFT JOIN `product_images` AS c 
        ON (a.`product_id` = c.`product_id`) 
    LEFT JOIN `brands` AS d 
        ON (a.`brand_id` = d.`brand_id`) 
    INNER JOIN `industries` AS e 
        ON (a.`industry_id` = e.`industry_id`) 
WHERE 
    b.`website_id` = %d
    AND b.`status` = %d
    AND b.`active` = %d
    AND c.`sequence` = %d
    AND ( 
        MATCH( a.`name`, a.`sku`, a.`description` ) AGAINST ( '%s' IN BOOLEAN MODE ) 
        OR MATCH( d.`name` ) AGAINST( '%s' IN BOOLEAN MODE ) 
    )
GROUP BY a.`product_id` 
ORDER BY relevance DESC 
LIMIT 0, 9

О, и дори преди да правя пълнотекстово търсене с множество таблици, отнемаше около 1/2 секунда. Това е много подобрено.




  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 Подреждане по колона =x, колона възходящ?

  2. Как да изтрия каскада, когато parentID и childID са в една и съща таблица?

  3. Връща JSON отговор от MySQL заявка

  4. Персонализирана задача за рейк за DB:Таблицата не е намерена

  5. търсене на данни от html вход в mysql