2013-05-28 4 views
0

Je crée une table temporaire partiellement basée sur une structure provenant d'une autre table (non temporaire). J'ai juste besoin de la structure, pas des données. Dans mes recherches, j'ai trouvé 2 instructions SELECT qui fait ce que j'ai besoin:Copier le tableau sans données

SELECT ID, Field1 FROM Table1 (NOLOCK) WHERE 0=1 

et

SELECT TOP (0) ID, Field1 FROM Table1 (NOLOCK) 

La différence de performance est probablement négligeable, mais je voulais savoir qui SELECT est plus efficace?

Merci

EDIT 1: J'utilise Microsoft SQL Server 2005 - 9.00.5057.00 (X64) 64 bits sous Windows NT 6.1 (Build 7601: Service Pack 1)

EDIT 2: Plan d'exécution pour les deux déclarations ressemble exactement la même chose, donc je devine s'il y a une différence de performance, c'est négligeable.

+2

Avez-vous regardé le plan d'exécution? Si vous êtes curieux de connaître les performances, c'est généralement le meilleur endroit pour commencer. –

+0

Est-ce que cela utilise MS SQL Server? Si oui, quelle version? Si non, alors qu'est-ce RDBMS? –

+0

@ Abe Miessler Quel Aspec (s) dois-je regarder dans le plan d'exécution? Je ne suis pas un expert SQL (appris par moi-même comme je l'ai programmé) – George

Répondre

1

Les deux requêtes effectuent un balayage constant en prenant 0 ms, vous devriez donc choisir celui que vous et votre équipe déterminerez plus clair et plus lisible. Dans certains cas, performances n'est pas le facteur le plus important, mais maintenabilité doit toujours être pris en compte. Vous devriez l'utiliser pour guider votre décision.

Sur la base de ma préférence personnelle, je voudrais aller avec:

SELECT TOP (0) ID, Field1 FROM Table1 (NOLOCK) 

Le sqlfiddle qui démontre ce qui peut être trouvé here.

+0

Notre DB a des millions d'enregistrements, donc pour nous, la priorité n ° 1 est la performance. Puisque la performance dans ce cas n'est pas un problème, je suis d'accord avec vous sur le 'TOP (0)' - je l'aime beaucoup mieux que l'approche '0 = 1'. – George

Questions connexes