sql >> Database >  >> RDS >> Mysql

Onjuiste rij-index bij groeperen

Ik heb het antwoord zelf gevonden, moest de zoekopdracht opsplitsen in meerdere subquery's.

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

Blijkbaar veroorzaakte dat een enorm aantal geopende rijen voor de zoekopdracht (volgens EXPLAIN ), maar wist dat ook op te lossen met extra indices. Het volledige antwoord op dat probleem is hier te vinden:Het berekenen van rij-indexen met subquery's met joins, resulteert in A*B onderzochte rijen




  1. Willekeurig gewogen selectie van een evenement

  2. Databasestructuur/ontwerp

  3. php:SQLSTATE [HY000] [2002] Er kon geen verbinding worden gemaakt omdat de doelmachine dit actief weigerde

  4. Welke manieren zijn er om informatie over een anonieme/gastgebruiker op te slaan in een database?