Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MySql] Vista lentissima...si può ottimizzare in qualche modo?

    Ciao,
    allora ho creato una vista ma è veramente lentissima: ci mette la bellezza di 4 minuti e 26 secondi

    Praticamente ho 2 tabelle:

    codice:
    mysql> describe FEEDBACKVENDITORE;
    +---------------+--------------------------------------+------+-----+---------+-------+
    | Field         | Type                                 | Null | Key | Default | Extra |
    +---------------+--------------------------------------+------+-----+---------+-------+
    | Id_Oggetto    | int(11)                              | NO   | PRI | NULL    |       |
    | Id_Venditore  | varchar(20)                          | NO   |     | NULL    |       |
    | Id_Acquirente | varchar(20)                          | NO   |     | NULL    |       |
    | Feedback      | enum('Positivo','Neutro','Negativo') | NO   |     | NULL    |       |
    | Commento      | varchar(255)                         | YES  |     | NULL    |       |
    +---------------+--------------------------------------+------+-----+---------+-------+
    
    mysql> describe FEEDBACKACQUIRENTE;
    +---------------+--------------------------------------+------+-----+---------+-------+
    | Field         | Type                                 | Null | Key | Default | Extra |
    +---------------+--------------------------------------+------+-----+---------+-------+
    | Id_Oggetto    | int(11)                              | NO   | PRI | NULL    |       |
    | Id_Acquirente | varchar(20)                          | NO   |     | NULL    |       |
    | Id_Venditore  | varchar(20)                          | NO   |     | NULL    |       |
    | Feedback      | enum('Positivo','Neutro','Negativo') | NO   |     | NULL    |       |
    | Commento      | varchar(255)                         | YES  |     | NULL    |       |
    +---------------+--------------------------------------+------+-----+---------+-------+
    Le voglio mettere insieme per avere una tabella virtuale per tenere d'occhio la situazione feedback e per questo creo la seguente vista:

    codice:
    CREATE VIEW FeedbackRilasciati AS
    SELECT feedbackVenditore.Id_Venditore, feedbackAcquirente.Id_Acquirente, feedbackVenditore.commento AS commentovenditore, 
    feedbackAcquirente.commento AS commentoacquirente, feedbackVenditore.Id_Oggetto
    FROM feedbackvenditore JOIN feedbackacquirente
    ON feedbackvenditore.Id_Oggetto = feedbackacquirente.Id_Oggetto
    GROUP BY Id_Oggetto;
    e quando la eseguo ci mette un botto di tempo a darmi il risultato:

    codice:
    mysql> select * from FeedbackRilasciati limit 5;
    +---------------+------------------+--------------------------------+--------------------------------+------------+
    | Id_Venditore  | Id_Acquirente    | commentovenditore              | commentoacquirente             | Id_Oggetto |
    +---------------+------------------+--------------------------------+--------------------------------+------------+
    | .[|           | Io49RMBK0hTDziO? | COMME1TO KS5Z21 1VF7AN I3P6G57 | COMME8TO CQ1U8G 71I7J7C X5Y0K1 |          1 |
    | <4d8          | .CCl-_t6)tT'"X   | COMME6TO YG7C17 3WT4BM F7Y6V63 | COMME5TO FB4G8R 76T8R1P Q1R2R5 |          2 |
    | rJ<pS"t      | nTc              | COMME3TO YA4F11 4GU8KA D2I0K72 | COMME8TO QJ5C6Z 36R3O7Y R7I2G0 |          3 |
    | cB%:MA YA7`mA | $=gkeQ+o#d|[Q|[7 | COMME5TO LQ2K70 1ZK2NI O0O0V21 | COMME5TO AN6H0O 10F5D9C S6F9J3 |          4 |
    | `             | `:'              | COMME3TO TO3P50 2IV9HM J9T5Q44 | COMME1TO LD0J0C 82Q4U8W K8D9P6 |          5 |
    +---------------+------------------+--------------------------------+--------------------------------+------------+
    5 rows in set (4 min 26.79 sec)
    La cosa che rallenta molto è l'ORDER BY perchè deve ordinare ed è un'operazione pesantina...avete qualche idea per ottimizzarla e migliorarne le prestazioni senza dover togliere l'ORDER BY (magari qualche indice? oppure cambiare la forma o l'algoritmo della vista?)

    TNX

  2. #2
    Quanti dati ci sono in ognuna delle tabelle?

    Perchè 4 minuti è un tempo davvero indecente...e neanche praticabile visto che in molte situazioni andresti in timeout...
    Administrator of NAMDesign.Net

  3. #3
    Prova a mettere come indice l'id col quale fai l'order by

  4. #4
    Originariamente inviato da LeaderGL
    Quanti dati ci sono in ognuna delle tabelle?

    Perchè 4 minuti è un tempo davvero indecente...e neanche praticabile visto che in molte situazioni andresti in timeout...
    Ci sono tantissimi record: 426600 per tabella...quindi quasi un milione di record, è per un progetto universitario che prevede di ottimizzare un database dopo averlo popolato molto.

    Si avevo pensato anche io all'uso degli indici però volevo sapere se magari c'è qualche ottimizzazione della struttura della query...tipo tuning delle query per quelle che usano l'ored by

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.