我有一个大小约为20 GB的数据库。我想知道是否有任何特定于使用静态数据库的优化提示。当我的意思是静态时,我并不是指不经常改变,我的意思是不会改变。对于通常您远离易失性数据库的值或其他事物,是否存在任何极端设置,这可以使真正的静态数据库受益;特别是考虑到只有SELECT语句而且绝对没有INSERT语句?我正在使用MyISAM表。
- roschler
答案 0 :(得分:1)
由于一切都是MyISAM,您需要关注两件大事:
KEY CACHE
用于缓存的主要机制是密钥缓存。它只缓存来自.MYI文件的索引页面。要调整密钥缓存大小,请运行以下查询:
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(PowerOfTwo<0,0,IF(PowerOfTwo>3,0,PowerOfTwo)))+0.4999),
SUBSTR(' KMG',IF(PowerOfTwo<0,0,IF(PowerOfTwo>3,0,PowerOfTwo))+1,1)) recommended_key_buffer_size
FROM (SELECT LEAST(POWER(2,32),KBS1) KBS FROM
(SELECT SUM(index_length) KBS1 FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) AA) A,
(SELECT 2 PowerOfTwo) B;
这将给出您当前数据集(the query will cap the recommendation at 4G (4096M))的MyISAM密钥缓存(key_buffer_size)的推荐设置。对于32位操作系统,4GB是限制。对于64位,8GB。
FULLTEXT索引
您应该更改禁用词列表。您可能想要更改停用词,因为MySQL不会将this list of 643 words编入索引。尝试创建自己的禁用词列表并更改最小字长。
步骤1)创建自己的停用词列表。你可以添加'a','an'和'the'。
echo "a" > /var/lib/mysql/custom_stopwords.txt<BR>
echo "an" >> /var/lib/mysql/custom_stopwords.txt<BR>
echo "the" >> /var/lib/mysql/custom_stopwords.txt
步骤2)将这些选项添加到/etc/my.cnf
ft_min_word_len=2
ft_stopword_file=/var/lib/mysql/custom_stopwords.txt
步骤3)service mysql restart
步骤4)创建新的FULLTEXT索引。在重新启动mysql之前,任何现有的FULLTEXT索引都应该重新编制索引。
尝试这些想法!!!