2012-07-08 12 views
7

Ho trovato un caso divertente in SQL query SQL con prefisso stringa corrispondenza;un caso divertente per la query mysql "come 'xx'"

Ho creato una tabella come questa;

CREATE TABLE `EpgInfo` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) NULL NOT NULL DEFAUL '', 
    PRIMARY KEY (`id`), 
    KEY `title` (`title`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

Poi, ho inserito 1.000.000 righe di dati per titolo di colonna casuale la cui lunghezza è inferiore a 20.

uso 3 SQLs come questo:

  • SQL # 1: select * from EpgInfo2 where title like "快" limit 1;
  • SQL # 2: select * from EpgInfo2 where title = "中" limit 1;
  • SQL # 3: select * from EpgInfo2 where title like "中" limit 1;

E ho scoperto che:

  • SQL # 1 costa 0.2s.
  • SQL # 2 e SQL # 3 costano 0.0s. Ho utilizzato lo stato di visualizzazione come %handl% per trovare il piano di query, ho trovato SQL # 1 di scansione di tutti i dati dell'indice, SQL # 2 e SQL # 3 no.

Perché?

risposta

1

Quanto "lontano" nella tabella è "快" vs "中"?

Se "中" è stata visualizzata la prima riga, è necessario esaminare una sola riga per la seconda e la terza query.

Se l'altra era l'ultima riga, l'intera tabella dovrebbe essere sottoposta a scansione.

+0

questi 3 sql non hanno alcun risultato nei miei dati – user1010434

2

Utilizzare EXPLAIN per vedere come MySQL gestisce le query, potrebbe darvi un indizio.

Inoltre, prova altri caratteri. Forse MySQL sta interpretando erroneamente uno di quelli con un segno di percentuale.