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

    [MySql] Come ottimizzare queste 2 query?

    Ciao,
    stò portando avanti il progettone per un esame e devo ottimizzare al massimo alcune query SQL...come già mi è stato spiegato ci pensa l'ottimizzatore di query di MySql ma non si sa bene per quale motivo la proff come requisito fondamentale del progetto vuole che gliele portiamo anche in forma ottimizata...mi sò impiccando un po' a tentare di ottimizzare alcune query...mi date qualche idea per favore?

    Le tabelle da usare e la relativa struttura sono le seguenti:

    codice:
    TABELLA COMMENTO:
    mysql> describe COMMENTO;
    +--------------------+-------------+------+-----+---------+----------------+
    | Field              | Type        | Null | Key | Default | Extra          |
    +--------------------+-------------+------+-----+---------+----------------+
    | Id_Commento        | int(11)     | NO   | PRI | NULL    | auto_increment |
    | Commentatore       | varchar(20) | NO   | MUL | NULL    |                |
    | Oggetto_Commentato | int(11)     | NO   | MUL | NULL    |                |
    | Data               | datetime    | NO   |     | NULL    |                |
    | Titolo             | varchar(30) | NO   |     | NULL    |                |
    | Commento           | text        | NO   |     | NULL    |                |
    +--------------------+-------------+------+-----+---------+----------------+
    
    TABELLA INSERZIONE:
    mysql> describe INSERZIONE;
    +-----------------+-----------------------+------+-----+---------+----------------+
    | Field           | Type                  | Null | Key | Default | Extra          |
    +-----------------+-----------------------+------+-----+---------+----------------+
    | Id_Oggetto      | int(11)               | NO   | PRI | NULL    | auto_increment |
    | Titolo          | varchar(60)           | NO   | MUL | NULL    |                |
    | Descrizione     | text                  | YES  |     | NULL    |                |
    | Costo_Base      | decimal(6,2)          | YES  |     | NULL    |                |
    | Compralo_Subito | decimal(6,2)          | YES  |     | NULL    |                |
    | Scadenza        | datetime              | YES  |     | NULL    |                |
    | Stato_Oggetto   | enum('nuovo','usato') | YES  |     | NULL    |                |
    | Id_Venditore    | varchar(20)           | NO   |     | NULL    |                |
    | Id_Categoria    | varchar(30)           | NO   |     | NULL    |                |
    +-----------------+-----------------------+------+-----+---------+----------------+
    9 rows in set (0.00 sec)
    E le query da ottimizzare sono le seguenti:

    codice:
    1) Visualizzare i commenti ricevuti da un certo oggetto ordinandoli in ordine ascendente rispetto al campo Commentatore*/
    
    SELECT COMB.Oggetto_Commentato,INSERZIONE.Titolo, COMB.Titolo,COMB.Commentatore, INSERZIONE.Scadenza
    FROM INSERZIONE, COMMENTO AS COMA, COMMENTO AS COMB
    WHERE INSERZIONE.ID_Oggetto = COMA.Oggetto_Commentato
    AND COMA.Id_Commento = COMB.Id_Commento
    ORDER BY INSERZIONE.Id_Oggetto DESC
    LIMIT 5;SELECT COMMENTO.Commentatore, COMMENTO.Titolo, COMMENTO.Commento
    FROM COMMENTO
    WHERE Oggetto_Commentato = 9
    ORDER BY COMMENTO.Commentatore asc;
    e
    codice:
    2) Visualizza i 5 ultimi oggetti inseriti nelle inserzioni che sono stati commentati e le relative informazioni dei 
          commenti */
    
    SELECT COMB.Oggetto_Commentato,INSERZIONE.Titolo, COMB.Titolo,COMB.Commentatore, INSERZIONE.Scadenza
    FROM INSERZIONE, COMMENTO AS COMA, COMMENTO AS COMB
    WHERE INSERZIONE.ID_Oggetto = COMA.Oggetto_Commentato
    AND COMA.Id_Commento = COMB.Id_Commento
    ORDER BY INSERZIONE.Id_Oggetto DESC
    LIMIT 5;
    Mi chiedevo se le query che usano gli ORDER BY e LIMIT possano essere implementate in maniera migliore...oppure se si può migliorare qualcosa con diversi tipi di join da questi quà....

    Per favore è importante...devo trovare il modo di ottimizzarle qualche altra query (oltre a quelle che ho già sistemato) altrimenti non posso consegnare il progetto.

    Grazie mille
    Andrea

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    Re: [MySql] Come ottimizzare queste 2 query?

    Ciao,

    sarebbe stato meglio postare anchhe le relazioni F-Key

    comunque proviamo un po... non conosco Mysql... ma un poco di sql.

    allora:

    codice:
    1) Visualizzare i commenti ricevuti da un certo oggetto ordinandoli in ordine ascendente rispetto al campo Commentatore*/
    
    SELECT COMB.Oggetto_Commentato,INSERZIONE.Titolo, COMB.Titolo,COMB.Commentatore, INSERZIONE.Scadenza
    FROM INSERZIONE, COMMENTO AS COMA, COMMENTO AS COMB
    WHERE INSERZIONE.ID_Oggetto = COMA.Oggetto_Commentato
    AND COMA.Id_Commento = COMB.Id_Commento
    ORDER BY INSERZIONE.Id_Oggetto DESC
    LIMIT 5;SELECT COMMENTO.Commentatore, COMMENTO.Titolo, COMMENTO.Commento
    FROM COMMENTO
    WHERE Oggetto_Commentato = 9
    ORDER BY COMMENTO.Commentatore asc;

    queste mi sebrano 2 select. perche?

    suppongo si ottimizare solo la prima, quindi....

    codice:
    1) Visualizzare i commenti ricevuti da un certo oggetto ordinandoli in ordine ascendente rispetto al campo Commentatore*/
    
    SELECT 
    COMB.Oggetto_Commentato,
    INSERZIONE.Titolo, 
    COMB.Titolo,COMB.Commentatore, 
    INSERZIONE.Scadenza
    FROM INSERZIONE, COMMENTO AS COMA, COMMENTO AS COMB
    WHERE INSERZIONE.ID_Oggetto = COMA.Oggetto_Commentato 
    AND COMA.Id_Commento = COMB.Id_Commento 
    ORDER BY INSERZIONE.Id_Oggetto DESC
    LIMIT 5
    a cosa serve eseguire una select attingendo dati dalla stessa tabella 2 volte e mettento nella clausola WHERE quel tipo di assegnazione???

    codice:
    FROM INSERZIONE, COMMENTO AS COMA, COMMENTO AS COMB
    
    WHERE ...AND COMA.Id_Commento = COMB.Id_Commento
    forse c'e' qualcosa che mi sfugge.... potresti spiegarmelo?

    io farei una cosa cosi:

    codice:
    SELECT 
    COMENTO.Oggetto_Commentato,
    INSERZIONE.Titolo, 
    COMMENTO.Titolo,
    COMMENTO.Commentatore, 
    INSERZIONE.Scadenza
    FROM INSERZIONE
    LEFT JOIN COMMENTO ON COMMENTO.Oggetto_Commentato=INSERZIONE.Id_Oggetto
    ORDER BY COMMENTO.Commentatore ASC
    LIMIT 5
    ciao

  3. #3
    mmm non sò perchè ma la tua versione della query va in errore...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    che errore????

    forse e' solo un problema di sintassi... e' probabile che 'limit' non vada inserito dove e' attualmente.

    indica piu dettagli

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.