2010-05-19 5 views
0

J'essaie d'optimiser les performances de ma base de données. Ma question est - qu'est-ce qui est mis en cache dans la mémoire DB? Par exemple:Quelles données sont réellement mises en cache dans InnoDB/MySQL?

(table avec 2 colonnes: clé (indexé), les données (non indexé) mis à jour (non indexé)

Select * where updated=20100202 

(db fera une analyse - sera les lignes numérisées garder à mémoire)

Select * where key = 20 

(db fera référence à l'indice - sera les lignes identifiées garder en mémoire)

Répondre

1

Ming,

?

c'est une question délicate. Tout d'abord, vous devez choisir le bon moteur. Si vous utilisez InnoDB, vous pouvez définir le Buffer-pool et toutes les données seront mises en cache. Quelles données? Everithing. Des données, en effet, des index, des métainformations sur la table, etc. Souvenez-vous, pour InnoDB, du pool de mémoire tampon.

Pour MyISAM, le cache est divisé en différents tampons. Par exemple, vous pouvez définir key_buffer_size et MyISAM mettra en cache les informations sur les clés.

Pour votre exemple particulier, dans la première requête, il va scanner toute la table. Si vous avez un buffer_pool assez grand, il sera en mémoire. C'est pareil pour le second.

Autre chose. Vous devriez toujours avoir un index pour ce genre de requêtes.

Liens intéressants sur buffer_pool:

http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html

1

Pour autant que je sache, avec InnoDB, les index et les données seront conservées en mémoire (si innodb_buffer_pool_size est assez grand).

Questions connexes