Intérieure Joindre une Table à elle-Même

J'ai une table qui utilise les deux en identifiant les colonnes, appelons-id et nom d'utilisateur. ID est unique dans chaque enregistrement, et identifiant est unique pour l'utilisateur mais il est dans de nombreux dossiers.

Ce dont j'ai besoin pour faire est d'obtenir un enregistrement de l'Utilisateur par le nom d'utilisateur et ensuite rejoindre ce record pour le premier enregistrement que nous avons pour l'utilisateur. La logique de la requête est comme suit:

SELECT v1.id, MIN(v2.id) AS entryid, v1.userid
FROM views v1
INNER JOIN views v2
  ON v1.userid = v2.userid

Je suis en espérant que je n'ai pas à rejoindre la table à une sous-requête qui gère le min() le morceau de code qui semble être assez lente.

Avez-vous un index sur le nom de la colonne?
Ou un composé de l'indice sur l'id utilisateur et Id? Est l'Id de la PK pour la ligne?
Parce que vous devriez faire une sous-requête et il ne devrait pas être lent. Si vous pouvez modifier les structures de données, vous pouvez toujours ajouter une colonne pour le premier enregistrement d'un utilisateur et de la maintenir dans le code, ou de les maintenir à une table différente, si cela va être trop lent...
ID est un PK actuellement et j'ai indices d'installation à travers le nom d'utilisateur et de colonnes. La table de base de données est actuellement à ~5 000 000 de lignes.
Est que votre requête? Je pense que je suis absent pourquoi vous avez besoin d'une jointure.

OriginalL'auteur Dave Long | 2012-12-03