Rapidité de requêtage : Enum ou Tinyint ?

Eléphanteau du PHP | 33 Messages

25 févr. 2011, 03:43

Bonjour,

J'ai une table de commentaires comportant + d'1 million de lignes, construite de la sorte (simplifiée)

id
id_membre
texte
section
id_fiche

section est actuellement un champs enum ('series_tv','films','livres','videos'....) comportant 25 valeurs différentes.

Je me demandais ce qui était le mieux pour mon champs section au niveau rapidité de requêtage :
- garder le enum
- le changer en un tiny int 1 unsigned (qui comportera des valeurs allant de 1 a 25 voir un peu plus par la suite mais 35maxi). series_tv => 1, films=>2, livres=>3

Les 2 principaux types de requête sur cette table :
SELECT * FROM commentaires WHERE section = 'films' AND id_fiche = 99 LIMIT 0,25
(sort les commentaires sur une fiche). Utilise un index (section,id_fiche)
SELECT * FROM commentaires WHERE section = 'films' LIMIT 0,25
(sort les 25 derniers commentaires de la section films). J'ai tenté d'indexer mon champ enum mais ça change pas grand chose, de souvenir un enum est déjà indéxé.

Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 févr. 2011, 03:56

salut,

perso j'utiliserais une table extérieure et y mettrais la clef primaire en clef étrangère.
pourquoi ?
- maintenabilité (pas besoin d'un alter table pour une faute d’orthographe ou l’ajout retrait d'un "type/section"
- Portabilité du script, la c'est MySQL only tu ne pourra pas le faire fonctionner sur un autre SGBD.


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

25 févr. 2011, 04:12

salut,

perso j'utiliserais une table extérieure et y mettrais la clef primaire en clef étrangère.
pourquoi ?
- maintenabilité (pas besoin d'un alter table pour une faute d’orthographe ou l’ajout retrait d'un "type/section"
- Portabilité du script, la c'est MySQL only tu ne pourra pas le faire fonctionner sur un autre SGBD.


@+
Ces deux points ne me dérange pas, ma liste de sections je la modifie une fois par an et encore (Dans le cas d'un tiny int y'a pas cette problèmatique), et je compte pas aller sur autre chose que mysql.

La je veux juste avoir un avis sur la question que j'ai posé. Enum ou tiny int au niveau des perfs de requêtage ^^

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 févr. 2011, 07:48

regarde ce que donne un explain sur les deux type de requete

@+
Il en faut peu pour être heureux ......