|
Optimisation (sept) Tableau
1. Sélectionnez les données du moteur souhaitées MyISAM: adapté à un grand nombre d'opérations de lecture de table InnoDB: adapté à un grand nombre de la table d'écriture-lecture 2. Sélectionnez le type de colonne appropriée Utilisez SELECT * FROM TB_TEST PROCÉDURE analyze () peut analyser chaque champ dans ce tableau, le type de colonne est donné des suggestions d'optimisation 3. Pour les valeurs NULL dans une colonne sans enregistrer l'utilisation NOT NULL, ce qui est particulièrement important pour la colonne que vous souhaitez indexer 4. Mettre en place indice approprié L'utilisation des champs de longueur fixe, plus vite que plus (Viii) le principe de l'indexation 1. l'utilisation rationnelle de l'indice Un tableau dans une requête ne peut utiliser un index, utilisez la commande EXPLAIN pour vérifier le bon fonctionnement de l'optimiseur Utilisez l'optimiseur pour aider à analyser l'effet de l'utilisation de l'index pour faire des prévisions plus précises 2. L'indice doit être créé sur une colonne dans la recherche de données, le tri, le regroupement et d'autres opérations impliquées 3. Essayez d'indexation pour dupliquer les données dans une petite colonne, il est de préférence le seul Par exemple: colonne anniversaire peut être indexé, mais pas l'indice de colonne de sexe 4. Essayez indice de comparaison de la valeur plus courte Réduire disque des opérations d'entrées-sorties, le tampon d'index peut contenir plusieurs clés pour améliorer le taux de succès Si l'indice d'une longue chaîne, peut spécifier une longueur de préfixe 5. l'utilisation rationnelle de l'indice multi-colonnes Si vous avez souvent besoin de combiner plusieurs requêtes de critères, vous devrez utiliser un index à plusieurs colonnes (une table, car une requête ne peut utiliser un index, créer un index multiple séparé également utiliser un seul) 6. Utiliser pleinement le préfixe gauche plus Autrement dit, d'organiser l'ordre des colonnes d'index à plusieurs colonnes, la plus surface supérieure commune 7. Ne créez pas trop d'index Souvent appliqué où seulement, par ordre, groupe par les besoins sur le terrain à indexer. 8. Utilisez journal des requêtes lentes à savoir la requête lente (requêtes log-lentes, long_query_time) (Ix) utiliser pleinement l'indice 1. Essayez de comparer la même colonne de type de données 2. L'indépendant que possible afin que la colonne d'index dans les expressions de comparaison, lorsque mycol <4/2 utiliser un index et où mycol * 2 <4 n'est pas utilisé 3. La fonction Ajouter ne champ pas question, autant que possible, L'ANNÉE OU (date_col) <1990 transformé en WHERE date_col < '1990-01-01' OÙ TO_DAYS (date_col) - TO_DAYS (CURDATE ()) <seuil 改造 成 OÙ date_col <DATE_ADD (CURDATE (), coupure INTERVAL DAY) 4. Ne pas utiliser les caractères génériques au début, le mode COMME 5. Utilisez rejoindre directement pour forcer l'optimiseur selon la clause FROM ordre de jointure peut choisir rejoindre directement, obligatoire pour tous les liens, peuvent choisir * à partir d'une jointure droite b séquence obligatoire de deux tables. 6. Utilisez l'utilisation obligatoire de l'indice de force index spécifié comme select * ordre de l'indice de force song_lib (de SONG_NAME) par SONG_NAME efficacité supérieure à ne pas forcer l'index 7. éviter d'utiliser les conversions de type automatique MySQL, sinon il ne sera pas utiliser l'index comme num_col type int utilisé où num_col = « 5 » Optimisation (X) des instructions SQL 1. Créez un tableau de résultat statistique intermédiaire approprié, réduire les risques de grandes tables de recherche de données 2. Essayez d'éviter d'utiliser des sous-requêtes, et la manière de connexion de commutation par exemple: SELECT a.id, (SELECT MAX (créé) à partir de postes où author_id = a.id) AS latest_post FROM auteurs d'un Peut être changé en: SELECT a.id, MAX (p.created) AS latest_post FROM auteurs en tant que INNER JOIN messages p ON (a.id = p.author_id) GROUP BY a.id sélectionnez song_id de song_lib où singer_id en (Choisir singer_id de singer_lib où first_char = 'A' ) Limite 2000 lecture: sélectionnez song_id de song_lib un jointure interne singer_lib b sur a.singer_id = b.singer_id et first_char = 'A' limite 2000 3. Lors de l'insertion en double détermination clé, en utilisant Duplicate KEY MISE À JOUR: insérer dans db_action.action_today valeurs (user_id, song_id, action_count) (1,1,1) ON KEY UPDATE DUPLICATA action_count = action_count + 1; 4. Évitez d'utiliser les curseurs Très faible efficacité opérationnelle du curseur, vous pouvez augmenter la table temporaire, l'utilisation de requêtes multi-tables, mises à jour multi-tables, etc. pour compléter la tâche, ne pas utiliser le curseur. analyse (Xi) à l'aide Expliquer instruction SQL en utilisant le cas index Lorsque vous mettez en face d'un mot-clé EXPLIQUER instruction SELECT, MySQL expliquer comment il traitera SELECT, fournir des informations sur la façon dont la table et se joindre à ce que l'ordre couplé au moyen de EXPLIQUER, vous pouvez savoir quand être ajouté à l'index de la table pour obtenir un vous pouvez également utiliser dans l'index pour trouver un enregistrement plus rapide SELECT, si l'optimiseur joint les tables avec un ordre optimal. Pour forcer l'optimiseur à utiliser un ordre de regroupement d'une instruction SELECT, ajouter une clause de STRAIGHT_JOIN. . EXPLIQUER syntaxe générale de la commande est: EXPLIQUEZ <commandes SQL> telles que: expliquer select * à partir d'une jointure interne b sur a.id = b.id Analyse détaillée des paramètres EXPLIQUEZ: 1.table: C'est le nom de la table. 2.Tapez: type d'opération de liaison. système: un seul enregistrement (seulement une table de données peu pratique) tableau const: table jusqu'à une ligne de correspondance, compare tout ou partie PRIMARY KEY index unique avec une valeur constante pour Tels que: select * from song_lib où song_id = 2 (table song_id de clé primaire) eq_ref: Pour chaque combinaison de lignes à partir de l'avant de la table, à partir de la table ou de l'index UNIQUE KEY PRIMARY lire une ligne, 如: select * from song_lib une jointure interne singer_lib b sur a.singer_id = b.singer_id (b 的 Type 值为 eq_ref) ref: Pour chaque combinaison de lignes à partir de l'avant de la table, à partir de la table par la non-UNIQUE ou PRIMARY KEY lire l'index de rangée 如: select * from song_lib une jointure interne singer_lib b sur a.singer_name = b.singer_name 和 sélectionner * de singer_lib b où « CCC » singer_name = (type b ayant une valeur de l'arbitre, parce que b.singer_name indice ordinaire) ref_or_null: REF comme type de couplage, mais ajoute une des lignes de recherche spéciales MySQL peut contenir des valeurs NULL, 如: select * from singer_lib où 'ccc' singer_name = ou singer_name est nulle index_merge: l'indice procédé d'optimisation d'indication de type de couplage combiné Légende: Il indique le nom de l'index MySQL effectivement utilisé. Si elle est vide (ou NULL), alors MySQL ne pas utiliser l'index. key_len: la longueur de la partie d'index est utilisé, en octets. 3.ref: ref rangée ou une colonne qui touche affiche utilisée avec une constante choisie dans une ligne de la table 4.rows: MySQL considère le nombre d'enregistrements qui doivent être numérisés avant de trouver le bon résultat. Il est clair que, ici le nombre d'idéal est 1. 5.Extra: de nombreuses options différentes peuvent apparaître ici, la plupart auront un impact négatif sur la requête. Général sont: en utilisant où: indication de l'endroit où les conditions en utilisant filesort: indiquer l'utilisation du tri des fichiers, qui utilise l'ordre par article, et ne pas utiliser l'index dans l'ordre par champ, exigeant le tri supplémentaire des frais généraux, donc si cela signifie en utilisant la commande semblent filesort inefficaces, doivent être optimisés, tels que l'adoption de l'indice obligatoire Méthode (indice de force)
|
Optimisation (sept) Tableau
1. Sélectionnez les données du moteur souhaitées MyISAM: adapté à un grand nombre d'opérations de lecture de table InnoDB: adapté à un grand nombre de la table d'écriture-lecture 2. Sélectionnez le type de colonne appropriée Utilisez SELECT * FROM TB_TEST PROCÉDURE analyze () peut analyser chaque champ dans ce tableau, le type de colonne est donné des suggestions d'optimisation 3. Pour les valeurs NULL dans une colonne sans enregistrer l'utilisation NOT NULL, ce qui est particulièrement important pour la colonne que vous souhaitez indexer 4. Mettre en place indice approprié L'utilisation des champs de longueur fixe, plus vite que plus (Viii) le principe de l'indexation 1. l'utilisation rationnelle de l'indice Un tableau dans une requête ne peut utiliser un index, utilisez la commande EXPLAIN pour vérifier le bon fonctionnement de l'optimiseur Utilisez l'optimiseur pour aider à analyser l'effet de l'utilisation de l'index pour faire des prévisions plus précises 2. L'indice doit être créé sur une colonne dans la recherche de données, le tri, le regroupement et d'autres opérations impliquées 3. Essayez d'indexation pour dupliquer les données dans une petite colonne, il est de préférence le seul Par exemple: colonne anniversaire peut être indexé, mais pas l'indice de colonne de sexe 4. Essayez indice de comparaison de la valeur plus courte Réduire disque des opérations d'entrées-sorties, le tampon d'index peut contenir plusieurs clés pour améliorer le taux de succès Si l'indice d'une longue chaîne, peut spécifier une longueur de préfixe 5. l'utilisation rationnelle de l'indice multi-colonnes Si vous avez souvent besoin de combiner plusieurs requêtes de critères, vous devrez utiliser un index à plusieurs colonnes (une table, car une requête ne peut utiliser un index, créer un index multiple séparé également utiliser un seul) 6. Utiliser pleinement le préfixe gauche plus Autrement dit, d'organiser l'ordre des colonnes d'index à plusieurs colonnes, la plus surface supérieure commune 7. Ne créez pas trop d'index Souvent appliqué où seulement, par ordre, groupe par les besoins sur le terrain à indexer. 8. Utilisez journal des requêtes lentes à savoir la requête lente (requêtes log-lentes, long_query_time) (Ix) utiliser pleinement l'indice 1. Essayez de comparer la même colonne de type de données 2. L'indépendant que possible afin que la colonne d'index dans les expressions de comparaison, lorsque mycol <4/2 utiliser un index et où mycol * 2 <4 n'est pas utilisé 3. La fonction Ajouter ne champ pas question, autant que possible, L'ANNÉE OU (date_col) <1990 transformé en WHERE date_col < '1990-01-01' OÙ TO_DAYS (date_col) - TO_DAYS (CURDATE ()) <seuil 改造 成 OÙ date_col <DATE_ADD (CURDATE (), coupure INTERVAL DAY) 4. Ne pas utiliser les caractères génériques au début, le mode COMME 5. Utilisez rejoindre directement pour forcer l'optimiseur selon la clause FROM ordre de jointure peut choisir rejoindre directement, obligatoire pour tous les liens, peuvent choisir * à partir d'une jointure droite b séquence obligatoire de deux tables. 6. Utilisez l'utilisation obligatoire de l'indice de force index spécifié comme select * ordre de l'indice de force song_lib (de SONG_NAME) par SONG_NAME efficacité supérieure à ne pas forcer l'index 7. éviter d'utiliser les conversions de type automatique MySQL, sinon il ne sera pas utiliser l'index comme num_col type int utilisé où num_col = « 5 » Optimisation (X) des instructions SQL 1. Créez un tableau de résultat statistique intermédiaire approprié, réduire les risques de grandes tables de recherche de données 2. Essayez d'éviter d'utiliser des sous-requêtes, et la manière de connexion de commutation par exemple: SELECT a.id, (SELECT MAX (créé) à partir de postes où author_id = a.id) AS latest_post FROM auteurs d'un Peut être changé en: SELECT a.id, MAX (p.created) AS latest_post FROM auteurs en tant que INNER JOIN messages p ON (a.id = p.author_id) GROUP BY a.id sélectionnez song_id de song_lib où singer_id en (Choisir singer_id de singer_lib où first_char = 'A' ) Limite 2000 lecture: sélectionnez song_id de song_lib un jointure interne singer_lib b sur a.singer_id = b.singer_id et first_char = 'A' limite 2000 3. Lors de l'insertion en double détermination clé, en utilisant Duplicate KEY MISE À JOUR: insérer dans db_action.action_today valeurs (user_id, song_id, action_count) (1,1,1) ON KEY UPDATE DUPLICATA action_count = action_count + 1; 4. Évitez d'utiliser les curseurs Très faible efficacité opérationnelle du curseur, vous pouvez augmenter la table temporaire, l'utilisation de requêtes multi-tables, mises à jour multi-tables, etc. pour compléter la tâche, ne pas utiliser le curseur. analyse (Xi) à l'aide Expliquer instruction SQL en utilisant le cas index Lorsque vous mettez en face d'un mot-clé EXPLIQUER instruction SELECT, MySQL expliquer comment il traitera SELECT, fournir des informations sur la façon dont la table et se joindre à ce que l'ordre couplé au moyen de EXPLIQUER, vous pouvez savoir quand être ajouté à l'index de la table pour obtenir un vous pouvez également utiliser dans l'index pour trouver un enregistrement plus rapide SELECT, si l'optimiseur joint les tables avec un ordre optimal. Pour forcer l'optimiseur à utiliser un ordre de regroupement d'une instruction SELECT, ajouter une clause de STRAIGHT_JOIN. . EXPLIQUER syntaxe générale de la commande est: EXPLIQUEZ <commandes SQL> telles que: expliquer select * à partir d'une jointure interne b sur a.id = b.id Analyse détaillée des paramètres EXPLIQUEZ: 1.table: C'est le nom de la table. 2.Tapez: type d'opération de liaison. système: un seul enregistrement (seulement une table de données peu pratique) tableau const: table jusqu'à une ligne de correspondance, compare tout ou partie PRIMARY KEY index unique avec une valeur constante pour Tels que: select * from song_lib où song_id = 2 (table song_id de clé primaire) eq_ref: Pour chaque combinaison de lignes à partir de l'avant de la table, à partir de la table ou de l'index UNIQUE KEY PRIMARY lire une ligne, 如: select * from song_lib une jointure interne singer_lib b sur a.singer_id = b.singer_id (b 的 Type 值为 eq_ref) ref: Pour chaque combinaison de lignes à partir de l'avant de la table, à partir de la table par la non-UNIQUE ou PRIMARY KEY lire l'index de rangée 如: select * from song_lib une jointure interne singer_lib b sur a.singer_name = b.singer_name 和 sélectionner * de singer_lib b où « CCC » singer_name = (type b ayant une valeur de l'arbitre, parce que b.singer_name indice ordinaire) ref_or_null: REF comme type de couplage, mais ajoute une des lignes de recherche spéciales MySQL peut contenir des valeurs NULL, 如: select * from singer_lib où 'ccc' singer_name = ou singer_name est nulle index_merge: l'indice procédé d'optimisation d'indication de type de couplage combiné Légende: Il indique le nom de l'index MySQL effectivement utilisé. Si elle est vide (ou NULL), alors MySQL ne pas utiliser l'index. key_len: la longueur de la partie d'index est utilisé, en octets. 3.ref: ref rangée ou une colonne qui touche affiche utilisée avec une constante choisie dans une ligne de la table 4.rows: MySQL considère le nombre d'enregistrements qui doivent être numérisés avant de trouver le bon résultat. Il est clair que, ici le nombre d'idéal est 1. 5.Extra: de nombreuses options différentes peuvent apparaître ici, la plupart auront un impact négatif sur la requête. Général sont: en utilisant où: indication de l'endroit où les conditions en utilisant filesort: indiquer l'utilisation du tri des fichiers, qui utilise l'ordre par article, et ne pas utiliser l'index dans l'ordre par champ, exigeant le tri supplémentaire des frais généraux, donc si cela signifie en utilisant la commande semblent filesort inefficaces, doivent être optimisés, tels que l'adoption de l'indice obligatoire Méthode (indice de force)