Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema query complessa su db grande

    Salve a tutti, ho un db contentente le regioni, le province, i comuni e un sacco di strutture turisctiche italiane, ora voglio fare una query che mi selezioni 3 strutture a caso per 3 regioni a caso, facendo conto però che le tabelle sono così settate

    Regioni - id,nome
    Province - id,nome,regione
    Comuni - id,nome,provincia
    strutture - id,nome,stelle,comune

    Ho pensato di iniziare dal punto più basso e tramite il RAND() selezionare i livelli superiori così:


    codice:
    "SELECT nome,id,stelle FROM strutture WHERE comuni = (SELECT id FROM comuni WHERE id = (SELECT id FROM province WHERE province = (SELECT id FROM province ORDER BY RAND() LIMIT 0,1) ORDER BY RAND() LIMIT 0,1) ORDER BY RAND() LIMIT 0,1 ) ORDER BY RAND() LIMIT 0,3"
    Ma va al mega rallenty...
    Andrea

    if($browser == 'internet explorer'){
    $bestemmie++;
    }

  2. #2
    direi che la query va riorganizzata con delle JOIN

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Innanzitutto, gli indici sono stati creati?

    Oltre a questo, ti segnalo questo articolo (in inglese), che spiega nei dettagli come migliorare le prestazioni, per quello che devi fare te.
    Appena ho tempo gli do un'occhiata, ma nel frattempo prova tu

    http://jan.kneschke.de/projects/mysql/order-by-rand/

    Facci sapere.

    Ciao

  4. #4
    Grazie mille, gli darò un occhiata
    Andrea

    if($browser == 'internet explorer'){
    $bestemmie++;
    }

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    L'ordinamento casuale già è lento di suo su una grossa mole di dati. Non oso pensare con tutte quelle chiamate annidate che fai.

  6. #6
    Già, pensavo anch'io
    Andrea

    if($browser == 'internet explorer'){
    $bestemmie++;
    }

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    In pratica vuoi estrarre tre strutture, però DEVONO essere necessariamente di tre regioni diverse. E' corretto?

    Puoi postare un piccolo dump delle quattro tabelle popolate con qualche record per fare delle prove?

  8. #8
    forse potrebbe essere più veloce creare delle tabelle temporanee e lavorare su quelle

  9. #9
    A dire il vero i piani sono un pò cambiati, mi è stato chiesto di non renderlo più casuale ma di aggiungere un campo 'selezionato' tinyint tramite il quale da pannello amministratore selezione quali regioni e quali strutture selezionare!
    Grazie comunque per le pronte risposte, non mi ero mai avventurato prima in un db così grande!
    Andrea

    if($browser == 'internet explorer'){
    $bestemmie++;
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Originariamente inviato da Nedyc
    A dire il vero i piani sono un pò cambiati, mi è stato chiesto di non renderlo più casuale ma di aggiungere un campo 'selezionato' tinyint tramite il quale da pannello amministratore selezione quali regioni e quali strutture selezionare!
    Grazie comunque per le pronte risposte, non mi ero mai avventurato prima in un db così grande!
    In tutti i casi, controlla lo stesso se esistono gli indici su quelle tabelle e come sono dichiarati.

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.