2010-09-15 4 views
1

J'ai une question sur le résultat de recherche équivalent, qui peut se produire sur différents champs.Quel est le meilleur type de champ et l'utilisation des données pour accélérer les recherches?

Disons que j'enregistre l'état de suppression logique des enregistrements avec 3 champs comme:

  • Boolean supprimé
  • Date de DeleteDate
  • Chaîne DeleteUserName

Le but de la requête est d'éviter d'avoir supprimé les enregistrements dans ma sélection. Donc, je peux rechercher le premier champ avec seulement 2 valeurs (Vrai/Faux), ou à la date de suppression: beaucoup de valeurs différentes, ou sur le nom d'utilisateur, des valeurs différentes mais pas beaucoup. Qu'est-ce qui donnera le meilleur temps de recherche, en ce qui concerne l'utilisation de l'index?

+0

Quels SGBD utilisez-vous. Quels index sont disponibles? Demandez-vous quels index créer? Quelle est la ration des mises à jour de vos données aux requêtes? –

Répondre

0

Si vous faites:

SELECT * FROM table WHERE 'deleted' = 0

(dans ce format), il serait le plus rapide: Les autres ne le font pas recherche plus ou moins vite, cependant, il y a moins de frais généraux requis comparer Bools que de comparer des cordes/dates. (Habituellement, les aspects de différents systèmes changent, certains Bools sont stockés en 8 bits, et non optimisés par test d'égalité)

0

Quelles requêtes avez-vous l'intention d'exécuter? Quelque chose comme ceci:

SELECT * FROM mytable WHERE `deleted`=0 

ou

SELECT * FROM mytable WHERE `deleted_date` IS NULL 

Ils devraient être sur le même si deleted et deleted_date sont indexées.

Questions connexes