我有一个大小约为20GB的数据库。我想知道是否有任何优化技巧是针对处理静态数据库的。所谓静态,不是指很少更改,而是完全不会更改。是否有一些极端设置的值或其他东西,通常你要避免在易变数据库中使用,但可以使真正的静态数据库受益;特别是考虑到只会有SELECT语句,绝对没有INSERT语句?我正在使用MyISAM表。
-- roschler
-- roschler
由于所有内容都是MyISAM,因此您需要关注两个主要方面:
关键缓存
用于缓存的主要机制是关键缓存。它仅缓存.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;
这将根据您当前的数据集(查询将在4G(4096M)处限制建议)提供MyISAM Key Cache(key_buffer_size)的推荐设置。对于32位操作系统,4GB是极限。对于64位,则为8GB。
FULLTEXT索引
您应该更改停用词列表。您可能想更改停用词,因为MySQL不会索引这个包含643个单词的列表。尝试创建自己的停用词列表并更改最小单词长度。
步骤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
第三步)service mysql restart
第四步)创建新的FULLTEXT索引。在mysql重启之前存在的任何现有FULLTEXT索引都应重新索引。
尝试这些想法吧!!!