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

    Explain, errore su query che ha zero risultati

    Salve a tutti, stavo facendo un pò di ottimizzazione delle mie query controllando con l'explain che tutte usino gli indici correttamente, quando mi sono imbattuto in qualcosa di strano.

    Ho una tabella utenti fatta piu o meno cosi:
    ID, NICK, ATTIVAZIONE
    id è primario e nick è un indice.

    Ora, se faccio una query per vedere se un tale utente è attivo oppure no:
    Codice PHP:
    EXPLAIN SELECT uidattivazione
    FROM utenti
    WHERE id 
    '1'
    AND attivazione '0' 
    Poniamo il caso che non trova nulla perchè l'utente ancora non esiste, il risultato dell'explain è tutto NULL e negli extra ho questo messaggio:
    Impossible WHERE noticed after reading const table...

    Mentre, se facessi la stessa query sull'indice creato "NICK"
    Codice PHP:
    EXPLAIN SELECT uidattivazione
    FROM utenti
    WHERE nick 
    'Bukowski'
    AND attivazione '0' 
    anche qualora l'utente cercato non esistesse ho un explain ben descritta:
    Codice PHP:
    id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra  
    1 SIMPLE utenti ref attivazione
    ,nick nick 22 const 1 Using where 
    C'è qualche problema secondo voi o è tutto normale?

    Grazie
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    Codice PHP:
    EXPLAIN SELECT uidattivazione
    FROM utenti
    WHERE id 
    '1'
    AND attivazione '0' 
    Supponendo che id sia un numero intero, racchiudendo il valore tra i quote forzi mysql a operare una conversione in stringa, un po' come se gli passassi una funzione. Questo tipo di operazione "potrebbe" impedire l'uso dell'indice, anche se a volte l'ottimizzatore decide diversamente.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  3. #3
    Originariamente inviato da webus
    Codice PHP:
    EXPLAIN SELECT uidattivazione
    FROM utenti
    WHERE id 
    '1'
    AND attivazione '0' 
    Supponendo che id sia un numero intero, racchiudendo il valore tra i quote forzi mysql a operare una conversione in stringa, un po' come se gli passassi una funzione. Questo tipo di operazione "potrebbe" impedire l'uso dell'indice, anche se a volte l'ottimizzatore decide diversamente.
    Si questo lo sapevo, però devo dire che il più delle volte rispetta cmq l'indice INT anche se posto tra 2 apici.

    Cmq grazie, ho risolto diversamente facendo un controllo php e lasciando la query cosi ancora piu pulita.
    Perchè uso Maxthon? | Mi piace questa chat

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.