Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [SQL]lentezza query

  1. #1

    [SQL]lentezza query

    Salve sto avendo qualche problema ad effettuare una query su mysql...

    la mia tabella ha dei campi che chiameremo X, Y, Z, oltre al consueto campo ID


    devo trovare le terne X, Y, Z nella tabella per tutte le X che compaiono più di 20 volte

    ho usato una query del tipo:
    codice:
    select X, Y, Z 
    from tabella 
    where X in 
         (select X 
          from annunci 
          group by X 
          having count(distinct id) >20);
    considerato che per ogni record c'è un id differente.

    La query funziona, ma su 1750 records ci mette piu' di un minuto per eseguirla, il che mi sembra davvero troppo.

    A questo punto mi chiedo innanzitutto se è normale che ci metta cosi' tanto (considerato che le X che compaiono piu' di 20 volte sono solo 2, e che la query suddetta restituisce circa 60 records). E in secondo luogo chiedo consiglio riguardo un modo alternativo per eseguire questa query..

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    La query mi sembra giusta, a parte il "count(distinct id)" che non ha molto senso, puoi sostituirlo con count(*) ma non so se avrai dei miglioramenti.
    Da quello che dici mi sorge il sospetto che tu non abbia un indice su X...

  3. #3
    no non ho indici su X..

    cambierebbe qualcosa?

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Ascia75
    cambierebbe qualcosa?
    Prova e lustrati gli occhi

  5. #5
    cosa dovrei fare? non ho molta dimestichezza con gli indici...

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Se hai phpmyadmin basta andare sulla pagina della tabella (struttura), dirgli di creare un indice su 1 colonna e poi indicare la colonna

  7. #7
    fatto, ma ci mette lo stesso identico tempo di prima...

    dopo aver creato l'indice devo cambiare qualcosa nella query?

    la cardinalità dell'indice come la decido?

    ma sopratutto, a che serve l'indice?

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Posta la query e la definizione della tabella

  9. #9

    Re: [SQL]lentezza query

    Prova così:
    codice:
    select X, Y, Z 
    from tabella 
    INNER JOIN 
    (select X from tabella 
          group by X 
          having count(*) > 20) as tabella2
    ON tabella.X = tabella2.X

  10. #10
    grande skidx, 0.56 secondi!!

    l'unico appunto per dovere di cronaca: ho dovuto rinominare X nella query nidificata perchè senno mi diceva che era ambiguo.

    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.