2010-03-18 9 views
20

Comment fonctionne une requête SQL? Comment est-il compilé? La clause from est-elle compilée en premier pour voir si la table existe? Comment récupère-t-il réellement les données de la base de données? Comment et dans quel format les tables sont-elles stockées dans une base de données?Comment fonctionne une requête SQL?

J'utilise phpmyadmin, est-il possible que je peux jeter un regard dans les fichiers où les données sont stockées? J'utilise MySQL

+9

C'est une grande question! –

+0

Pas une réponse en soi, mais c'est ainsi que cela fonctionne à un niveau élevé dans Oracle. http://www.idevelopment.info/data/Oracle/DBA_tips/Tuning/TUNING_10.shtml – JavaRocky

+0

Pouvez-vous fournir le produit spécifique que vous avez l'intention? SQL Server, MySQL, Oracle, etc? –

Répondre

10

Eh bien ...

  • D'abord, vous avez une vérification de la syntaxe, suivie par la génération d'un arbre d'expression - à ce stade, vous pouvez également vérifier si des éléments existent et « aligner » (c.-à-champs existent AU SEIN de la table). C'est la première étape - toute erreur ici que vous dites simplement à l'expéditeur de devenir réel.
  • Ensuite, vous avez .... analyse. Une requête SQL est différente d'un programme en ce sens qu'elle ne dit pas COMMENT faire quelque chose, QUEL EST LE RÉSULTAT. Définir la logique basée. Donc, vous obtenez un analyseur de requête (en fonction de produit mauvais à bon - oracle de longue date, DB2 les plus sensibles, même la mesure de la vitesse du disque) pour décider de la meilleure façon d'aborder ce résultat. C'est une bête vraiment compliquée - il peut essayer des dizaines ou des centaines d'approches pour en trouver une qu'il croit être la plus rapide (basée sur les coûts, essentiellement des statistiques).
  • Ensuite, cela est exécuté.

L'analyseur de requête, d'ailleurs, est l'endroit où vous voyez d'énormes différences. Pas sûr de MySQL - SQL Server (Microsoft) brille en ce qu'il n'a pas le meilleur (mais l'un des bons), mais qu'il a vraiment de beaux outils visuels pour afficher le plan de requête, comparer les estimations de l'analyseur à les vrais besoins (s'ils diffèrent trop des statistiques du tableau peuvent être désactivés, l'analyseur PENSE qu'une grande table est petite). Ils présentent joliment visuellement.

DB2 avait un optimiseur pendant un certain temps, la mesure - je l'ai déjà dit - la vitesse du disque pour le mettre dans elle est des estimations. Oracle est passé de "gauche à droite" (pas d'analyse réelle) pendant longtemps, et a pris des astuces de requête fournies par l'utilisateur (approche de la merde). Je pense que MySQL était très primitif au début - je ne sais pas où c'est maintenant.

format table dans la base de données, etc. - qui est vraiment quelque chose que vous ne devriez pas prendre soin de. Ceci est documenté (clairement, surtout pour une base de données open source), mais pourquoi s'en soucier? J'ai fait du travail SQL depuis près de 15 ans et je n'ai jamais eu ce besoin. Et cela inclut faire du travail assez haut de gamme dans certains domaines. Sauf si vous essayez de construire un outil de réparation de fichiers de base de données .... cela n'a aucun sens de déranger.

+0

quelques bonnes infos ici. Merci. – Learning

+0

@TomTom merci, comme vous le dites, je n'ai pas besoin de me soucier des formats de table, mais je veux vraiment le savoir par curiosité.Si je devais concevoir un Db peut-être que je stockerais mes tables dans csvs et ferais dire le traitement de strinfg pour récupérer des données, mais je voulais juste savoir comment d'autres l'ont fait ?? –

+0

certainement pas comme ça;) Vraiment - CSV est ridiculement inefficace. SQL Server (le seul dont je connais les détails) utilise un fichier de 8 Ko avec sa propre structure de gestion définissant ce que contient la page. Il y a des pages d'index, des pages de données, etc. C'est vraiment beaucoup plus compliqué pour être EFFICACE, un fichier CSV serait terriblement inefficace. – TomTom

4

Ceci est une bonne question, mais ne peut pas être complètement répondu ici.

Vous pouvez lire le livre Understanding MySQL Internals qui vous donnera des réponses à la plupart de vos questions.

1

Si votre produit cible est SQL Server, puis this article est un bon endroit pour commencer.

+0

@thanks se penchera sur !! –