Récemment, j'ai pensé si cela vaut la peine d'avoir 1 table avec peut-être beaucoup de colonnes NULL ou s'il vaut mieux avoir plus de tables sans NULL. J'ai entendu dire que NULL n'est pas stocké sur InnoDB, donc je me demandais s'il y avait un inconvénient ou un problème avec un tas de lignes avec beaucoup de NULL. J'ai toujours entendu dire que les valeurs NULL communes sont mauvaises, mais je n'ai jamais vraiment compris pourquoi. En passant, ceux-ci seront NULL sur les clés étrangères, si cela est important. En cas de doute, y a-t-il un problème de performance lorsque j'utilise INNER JOIN sur des colonnes qui ont beaucoup de valeurs NULL? Par exemple, si j'ai 4 clés étrangères, et que je vais faire 4 INNER JOINs, mais le plus probable est que 1 d'entre elles n'est pas NULL, cela affectera-t-il la performance? MerciQuel est l'impact de NULL sur les tables MySQL? (InnoDB)
Répondre
Voir:
NULLs sont indexés.
Dans InnoDB, vous pouvez réduire les besoins de stockage pour votre ligne de données en utilisant NULL.
Dans le livre MySQL haute performance: Optimisation, sauvegardes, réplication et plus par le Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy Zawodny, Arjen Lentz et Derek J. Balling, il dit des colonnes de table qui permettent NULLs il est plus difficile pour MySQL d'optimiser les requêtes qui font référence à des colonnes nullables. Et lorsqu'une colonne nullable est indexée, elle nécessite un octet supplémentaire par entrée et peut entraîner la conversion d'un index de taille fixe (tel qu'un index sur une seule colonne entière) en un index de taille variable dans MyISAM. Ils disent quand les colonnes doivent porter une valeur manquante, utiliser 0 pour les entiers, un caractère spécial ou une chaîne vide à la place. Evitez NULL et NOT NULL chaque fois que possible.
même sur le document officiel de mysql. http://dev.mysql.com/doc/refman/5.5/en/data-size.html – navy
- 1. mysql btree index sur les tables InnoDB?
- 2. MySql, InnoDB & Null Values
- 3. Comment utilisez-vous les tables MySQL InnoDB sur OS X?
- 4. MySQL InnoDB CASCADE?
- 5. Hibernate: Créer des tables MySQL InnoDB au lieu de MyISAM
- 6. MySQL InnoDB question de blocage
- 7. L'insertion de MySQL InnoDB est très lente
- 8. Configuration de MySQL pour InnoDB
- 9. Migrer les tables InnoDB vers PBXT
- 10. Est-il possible d'utiliser des clés étrangères Mysql dans les tables InnoDB pour une recherche inverse?
- 11. MySQL InnoDB ID doublés
- 12. MySQL InnoDB: innodb_flush_method
- 13. Mysql InnoDB "erreur 32" sur Windows
- 14. MySQL: InnoDB ou MyISAM Engine ::: quel est le meilleur pour beaucoup de sélections?
- 15. Le tri de pertinence de remplacement pour le fulltext MySQL dans les tables InnoDB?
- 16. Deadlock trouvé dans MySQL (InnoDB)
- 17. Quel est le meilleur système de fichiers Linux pour MySQL (InnoDB)?
- 18. MySQL PBXT vs InnoDB
- 19. mysql fulltext sur plusieurs tables
- 20. Heure de création des tables Innodb
- 21. Recherche plein texte sur la table MySql (Innodb vs ISAM)
- 22. Mysql InnoDB optimisation des performances et indexation
- 23. Fourchette MySQL INSERT INTO (InnoDB)
- 24. MySQL Cluster est beaucoup plus lent que InnoDB
- 25. Afficher les tables par moteur MySQL
- 26. Mysql InnoDB fusionner/copier des données
- 27. Hibernate: constraintName est null dans MySQL
- 28. tables sont vides dans MySQL
- 29. Tables à langer de MyISAM à InnoDB font lente
- 30. Requête MySql, combiner les tables
Salut Bill, merci pour votre réponse. J'aimerais en savoir plus sur l'impact sur les performances de faire INNER JOIN sur les colonnes qui ont beaucoup de valeurs NULL. Est-ce mauvais? – Clash
Je ne peux citer aucune mesure quantitative, mais je crois que toute différence de performance serait négligeable. Vous feriez mieux de concentrer votre attention sur les améliorations de performances qui donnent un meilleur rendement, comme l'utilisation d'EXPLAIN et la mise en cache intelligente. –