Comprenez vos besoins avant de concevoir le schéma (si possible).
En savoir plus sur les données, 1) l'indexation 2) le type de stockage utilisé, 3) le moteur ou les fonctionnalités du fournisseur; c'est-à-dire ... mise en cache, capacités en mémoire 4) types de données 5) taille de la table 6) fréquence de la requête 7) charges de travail associées si la ressource est partagée 8) Test
A) Les exigences varieront. Si le matériel ne peut pas prendre en charge la charge de travail attendue, vous devez réévaluer comment fournir les exigences dans la charge de travail. Concernant la colonne d'addition au tableau. Si la base de données prend en charge les vues, vous pouvez créer une vue indexée (?) Des données spécifiques avec les colonnes nommées spécifiques (vs sélectionner '*'). Passez régulièrement en revue vos données et votre schéma pour vous assurer de ne jamais tomber dans le syndrome "Garbage-in" -> "Garbage-out".
En supposant qu'il n'y a pas d'autre solution; vous pouvez prendre en compte les éléments suivants. Il existe toujours plusieurs solutions à un problème.
1) Indexation: La sélection * exécutera un scan de table. En fonction de divers facteurs, cela peut impliquer une recherche de disque et / ou un conflit avec d'autres requêtes. Si la table est polyvalente, assurez-vous que toutes les requêtes sont performantes et exécutez-les au-dessous de votre heure cible. S'il y a une grande quantité de données et que votre réseau ou autre ressource n'est pas réglé; vous devez en tenir compte. La base de données est un environnement partagé.
2) type de stockage. C'est-à-dire: si vous utilisez des SSD, un disque ou une mémoire. Les temps d'E / S et la charge sur le système / processeur varient.
3) Le DBA peut-il régler la base de données / tables pour des performances plus élevées? En supposant que pour quelque raison que ce soit, les équipes ont décidé que la sélection «*» est la meilleure solution au problème; la base de données ou la table peut-elle être chargée en mémoire. (Ou une autre méthode ... peut-être que la réponse a été conçue pour répondre avec un délai de 2 à 3 secondes? --- pendant qu'une publicité est diffusée pour gagner les revenus de l'entreprise ...)
4) Commencez par la ligne de base. Comprenez vos types de données et comment les résultats seront présentés. Types de données plus petits, le nombre de champs réduit la quantité de données renvoyées dans l'ensemble de résultats. Cela laisse des ressources disponibles pour d'autres besoins du système. Les ressources système ont généralement une limite; «toujours» travailler en dessous de ces limites pour assurer la stabilité et un comportement prévisible.
5) taille de la table / des données. sélectionner «*» est courant avec les petites tables. Ils tiennent généralement en mémoire et les temps de réponse sont rapides. Encore une fois ... revoyez vos besoins. Planifier le fluage des fonctionnalités; planifiez toujours les besoins actuels et futurs.
6) Fréquence des requêtes / requêtes. Soyez conscient des autres charges de travail sur le système. Si cette requête se déclenche toutes les secondes et que la table est minuscule. L'ensemble de résultats peut être conçu pour rester dans le cache / la mémoire. Cependant, si la requête est un processus par lots fréquent avec des gigaoctets / téraoctets de données ... il est préférable de consacrer des ressources supplémentaires pour éviter que d'autres charges de travail ne soient affectées.
7) Charges de travail connexes. Comprenez comment les ressources sont utilisées. Le réseau / système / base de données / table / application est-il dédié ou partagé? Quelles sont les parties prenantes? Est-ce pour la production, le développement ou l'AQ? Est-ce une "solution miracle" temporaire? Avez-vous testé le scénario? Vous serez surpris du nombre de problèmes pouvant exister sur le matériel actuel aujourd'hui. (Oui, les performances sont rapides ... mais la conception / les performances sont toujours dégradées.) Le système doit-il effectuer 10 000 requêtes par seconde contre 5 à 10 requêtes par seconde? Le serveur de base de données est-il dédié ou exécute-t-il d'autres applications de surveillance sur la ressource partagée? Certaines applications / langues; Les O / S consommeront 100% de la mémoire, provoquant divers symptômes / problèmes.
8) Test: testez vos théories et comprenez autant que possible. Votre problème de sélection «*» peut être un gros problème, ou il peut être quelque chose dont vous n'avez même pas besoin de vous inquiéter.
SELECT COUNT(*)
être mauvais est incroyablement vieux et obsolète . Pour plus d'informations surSELECT *
- voir: stackoverflow.com/questions/1960036/…