2010-01-07 3 views
5

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

6

Voir:

NULLs sont indexés.

Dans InnoDB, vous pouvez réduire les besoins de stockage pour votre ligne de données en utilisant NULL.

+0

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

+1

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. –

2

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.

+0

même sur le document officiel de mysql. http://dev.mysql.com/doc/refman/5.5/en/data-size.html – navy

Questions connexes