2011-07-08 2 views
3

table:comment puis-je créer un index pour cette requête SQL?

CREATE TABLE `deal` (
    `id` int(11) NOT NULL default '0', 
    `site` int(11) NOT NULL default '0', 
    `time` bigint(13) NOT NULL default '0', 
    PRIMARY KEY (`id`), 
    KEY `site` (`site`), 
    KEY `time` (`time`,`site`) 
) TYPE=MyISAM 

requête SQL:

select * from `deal` where time>0 && site=8 

Je crée l'index: time pour cette requête,

mais pourquoi cette requête en utilisant toujours l'index: site?

explain select * from `deal` where time>0 && site=8 

sortie:

table type possible_keys key key_len ref rows Extra 

deal  ref  site,time  site 4   const 1  Using where 

Répondre

5

Vous devez créer un index composite site + time (oui, les questions d'ordre).

donc supprimer les index site et time maintenant et créer 2:

  1. KEY site (site, time)
  2. KEY time (time)
+0

grâce zerkms, 'le site KEY (site, heure)' peut remplacer complètement la 'KEY site (site) '? (J'ai aussi besoin de 'select * from deal où site = 123') – Koerr

+1

@Zenofo: oui, on l'appelle" le plus à gauche ". Donc, avec l'index 'a + b + c' vous n'avez pas besoin d'avoir les index' a' et 'a + b', car il les couvre avec sa partie gauche – zerkms