Domanda

Ho un set di dati in MySQL in cui l'utilizzo del limite è già una query costosa e anche trovare il numero di risultati è costoso. Quindi, vorrei evitare di fare un'altra query per trovare il numero di risultati. Non riesco a usare MYSQL_CALC_FOUND_ROWS perché il limite è all'interno di una sottoquery:

SELECT * FROM items,
(
  SELECT
    item_id
  FROM
    (etc)
  WHERE
    some.field=<parameter>
  AND (etc)
  GROUP BY (something)
  ORDER BY (something_else) DESC
  LIMIT 15
) subset
WHERE item.id=subset.item_id

Potrei lasciare gli elementi di join e eliminare la subquery, quindi essere in grado di utilizzare MYSQL_CALC_FOUND_ROWS, tuttavia è molto, molto, molto lento. Ho provato tutte le ottimizzazioni dell'indice e supponiamo che sia fuori discussione.

Questo ora diventa più una domanda di progettazione ... come posso consentire all'utente di sfogliare questi dati quando non conosco l'ultima pagina ? So solo se sono andati troppo lontano (ad es. Query non restituisce risultati).

È stato utile?

Soluzione

Ecco un riassunto di un articolo del guru di MySQL Baron Schwartz:

http: //www.mysqlperformanceblog .com / 2008/09/24 / quattro-vie-a-ottimizzare-impaginati-display /

Quattro modi per ottimizzare i display impaginati

  1. Nella prima query, recupera e memorizza nella cache tutti i risultati.

  2. Non mostra tutti i risultati. Nemmeno Google ti consente di vedere il milionesimo risultato.

  3. Non mostra il conteggio totale o i collegamenti intermedi ad altre pagine. Mostra solo il "successivo" collegamento.

  4. Stima quanti risultati ci sono. Ancora una volta, Google fa questo e nessuno si lamenta.

Altri suggerimenti

Per rinforzarlo, il concetto di "quanti" è comunque estremamente transitorio; quando la risposta arriva all'utente, potrebbe facilmente essere sbagliata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top