针对完全静态数据库的MySQL优化技巧?

3
我有一个大小约为20GB的数据库。我想知道是否有任何优化技巧是针对处理静态数据库的。所谓静态,不是指很少更改,而是完全不会更改。是否有一些极端设置的值或其他东西,通常你要避免在易变数据库中使用,但可以使真正的静态数据库受益;特别是考虑到只会有SELECT语句,绝对没有INSERT语句?我正在使用MyISAM表。
-- roschler

你正在使用什么进行索引?你正在存储什么? - Nick ODell
@Nick ODell - 库存物品。查询通常是在标题、制造商等常见事项上进行的。 - Robert Oschler
这是一个查找(即需要精确匹配)还是搜索(即如果我搜索“帽子”,它应该找到所有标题中带有“帽子”的产品)?其次,您确定这不是过早优化吗? - Nick ODell
@Nick ODell - 这里涉及到一些FULLTEXT搜索。不确定你所说的“过早优化”是什么意思。 - Robert Oschler
如果您想得到那个问题的答案,您需要给我们提供数据库架构。 - Johan
1个回答

1

由于所有内容都是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索引都应重新索引。

尝试这些想法吧!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接