2010-06-11 4 views
0

À l'heure actuelle, je sélectionne les lignes de 'table01 et table02' en utilisant:MySQL PHP | "SELECT FROM table" utilisant "alphanumérique" -UUID. Vitesse vs. indexée Entier/indexé Char

SELECT t1.*,t2.* FROM table01 AS t1 
INNER JOIN table02 AS t2 ON (t1.ID = t2.t1ID) 
WHERE t1.UUID = 'whatever'; 

La colonne UUID est un index unique, du type: char (15), avec entrée alphanumérique . Je sais que ce n'est pas le moyen le plus rapide de sélectionner des données de la base de données, mais l'UUID est le seul identificateur de ligne disponible pour le serveur frontal.

Depuis que je dois sélectionner par UUID, et non ID, j'ai besoin de savoir quoi de ces deux options je devrais aller, si je dis que la table se compose de 100'000 lignes. Quelles différences de vitesse devrais-je examiner, et l'indice pour l'UUID grandirait-il et serait-il en retard par rapport à la DB?

obtenir l'ID avant de faire le « grand » select

1. $id = SELECT ID FROM table01 WHERE UUID = '{alphanumeric character}'; 
2. SELECT t1.*,t2.* FROM table01 AS t1 
    INNER JOIN table02 AS t2 ON (t1.ID = t2.t1ID) 
    WHERE t1.ID = $id; 

Ou garder la façon dont il est maintenant, en utilisant l'UUID. Remarque: Toutes les nouvelles lignes sont créées en vérifiant si le système a généré uniqueid avant d'essayer d'insérer une nouvelle ligne. Garder la colonne toujours unique.

Répondre

1

Pourquoi ne pas essayer? Créez une nouvelle base de données avec ces tables. Ecrire un script php rapide pour remplir les tables avec plus d'enregistrements que vous pouvez imaginer être stockés (si vous attendez 100k lignes, insérez 10 millions). Puis expérimenter avec différents index et les requêtes (rappelez-vous, EXPLAIN est votre ami) ...

Lorsque vous obtenez enfin quelque chose que vous pensez des œuvres, mettez la requête dans un script sur un serveur Web et cliquez avec ab (Apache Bench). Vous pouvez regarder ce qui se passe lorsque vous augmentez la simultanéité des demandes (1 à la fois, 2 à la fois, 10 à la fois, etc.). Tout cela ne devrait pas prendre trop de temps (peut-être quelques heures au maximum), mais il vous donnera une réponse FAR meilleure que n'importe qui à SO pourrait pour votre problème spécifique (comme nous ne connaissons pas la configuration de votre serveur de base de données). , schéma exact, limites de mémoire, etc ...)

1

La deuxième solution a les meilleures performances. Vous devez rechercher la ligne par l'UUID dans les deux solutions, mais dans la première solution, vous le faites d'abord par UUID, puis vous effectuez une recherche plus rapide par clé primaire, mais vous avez déjà trouvé la bonne ligne par UUID. cela n'a pas d'importance que la seconde recherche soit plus rapide car la deuxième recherche est totalement inutile.

+0

J'ai mis à jour les requêtes SQL pour illustrer l'utilisation de JOINS. Ce que j'ai d'abord demandé était tout à fait évident que j'ai réalisé. – dropson

+0

Dans ce cas, aucune idée. Si vous avez de la chance, MySQL résoudra automatiquement la dépendance WHERE avant le JOIN. Votre meilleur pari est probablement de l'essayer ... –

Questions connexes