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

Неправилен индекс на ред при групиране

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

SELECT
    mq.*,
    @indexer := @indexer + 1 AS indexer
FROM
(
    SELECT
        p.id,
        p.tag_id,
        p.title,
        p.created_at
    FROM 
        `posts` AS p
    LEFT JOIN
        `votes` AS v
            ON p.id = v.votable_id
            AND v.votable_type = "Post"
            AND v.deleted_at IS NULL
    WHERE
        p.deleted_at IS NULL
    GROUP BY
        p.id
) AS mq
JOIN
    (SELECT @indexer := 0) AS i

Очевидно това е причинило огромно количество достъпни редове за заявката (според EXPLAIN ), но успя да поправи и това с допълнителни индекси. Пълният отговор на този проблем може да бъде намерен тук:Изчисляване на индекси на ред с подзаявка, която има обединения, води до A*B проверени редове




  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. Създайте и импортирайте mysql база данни на споделен хост в php

  3. вмъкнете в база данни от дублирано текстово поле, ако не е празно php sql

  4. Защо тази заявка използва where вместо индекс?

  5. Импортирайте данни от Excel в MySql с Node JS