Visualizzazione dei risultati da 1 a 5 su 5

Discussione: mysql e index keys

  1. #1

    mysql e index keys

    Ho un dubbio che non riesco a chiarire....

    venendo al dunque questa è la mia tabella:

    codice:
    CREATE TABLE `ipblocker` (
      `start` int(10) unsigned NOT NULL default '0',
      `end` int(10) unsigned NOT NULL default '0',
      `rangename` varchar(128) NOT NULL default '',
      KEY `indice` (`start`,`end`)
    ) TYPE=MyISAM;
    il tipo di query che ci devo fare è questo:
    codice:
    SELECT rangename FROM `ipblocker` WHERE start <= '456654' AND end >= '456654' LIMIT 1
    di volta in volta cambia la costante int che uso per il confronto....

    il mio dubbio sta nel fatto che non so se ho prestazioni migliori usando una key unica (multidimensionale) come ho fatto sopra oppure usando due key separate una per start e una per end
    (le key sono index, non unique, in quanto devono essere permessi dati doppi)...

    facendo l'explain gli indici li usa entrambe le volte (nel secondo caso con due key ovviamente ne usa solo una: start... quindi la seconda la creo per nulla...), solo che con alcuni ip prevede poche row con un modo e più con un altro e con altri ip il contrario, quindi non so quale sia la migliore...

    in linea teoria la prima vero? in quanto prima guarda che sia rispettato il primo e poi controlla che sia rispettato pure il secondo...

    illuminatemi

    grazie, cya

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    hm... io userei due indici distinti. Credo, anche se non sono sicuro, che la condizione di >= sul secondo campo renda l'indice unico pressoché inutilizzabile (per la seconda condizione, appunto)

  3. #3
    Originariamente inviato da luca200
    hm... io userei due indici distinti. Credo, anche se non sono sicuro, che la condizione di >= sul secondo campo renda l'indice unico pressoché inutilizzabile (per la seconda condizione, appunto)
    anche se uso due indici distinti mysql il secondo lo ignora infatti non può usare più di un indice per tabella....

    sul manuale di mysql non sono molto chiari... ma usando i multicolonna anche per i where con > e <

    dici che il problema sti nel = ?

    se così posso modificare tutti i dati presenti nella tabella allargando i rages e leggendoli poi con > e < senza cercare la condizione =....

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da EvolutionCrazy
    usando i multicolonna anche per i where con > e <

    dici che il problema sti nel = ?
    no, secondo me il problema sta nel >.
    Comunque ti ripeto che non sono sicurissimo, quindi forse ti conviene fare qualche prova.

  5. #5
    Originariamente inviato da luca200
    no, secondo me il problema sta nel >.
    Comunque ti ripeto che non sono sicurissimo, quindi forse ti conviene fare qualche prova.
    qui dicono che vale anche con il >...

    http://dev.mysql.com/doc/mysql/en/Mu...n_indexes.html

    fanno queries proprio come quelle che voglio fare io...

    infatti se faccio l'explain l'indice viene usato...

    solo che in certi casi mysql prevede di controllare meno *righe* se uso gli indici separati invece di usarne uno solo...

    nei prox giorni devo provare su di un server di test i due metodi....

    una singola query impiega sempre tempi bassissimi (0.01 secondi) ed è difficile vedere la differenza con una query.... devo fare il controllo una una serie di ip spalmati su tutti i range possibili così da avere un prova generica

    grazie per le risposte, nei prox giorni vi saprò dire qual'è il metodo che da prestazioni maggiori

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.