大Mysql表优化

时间:2014-04-05 12:06:01

标签: mysql sql database performance

我有一张表用于缓存谷歌翻译API答案。 表结构是 db structure

现在它在group字段中有超过100万行,有35000个不同的值。 我使用的唯一查询类型是:

SELECT `orig_string`, `group`, `translated` FROM `Google_translate_cache` WHERE 
    (`group` = "?" AND
        ((`orig_string` = "?") 
     OR (`orig_string` = "?") 
     OR (`orig_string` = "?") ....

现在每个查询花费的时间超过2秒。

我尝试将查询更改为UNION,但结果是一样的。

另外我试图像这样分区表 -

ALTER TABLE `Google_translate_cache`
    PARTITION BY KEY(`orig_string`)
    PARTITIONS 26;

但这也没有成功。

有什么建议加快它吗?

1 个答案:

答案 0 :(得分:0)

我可能错了,但我认为“orig_string”上的表分区并不是你想要的。相反,(group,orig_string)上的复合索引帮助优化WHERE子句限定符的位置。现在,使用组列 - 真正的255容量?当被测试的原始字符串最大值为100时,真的需要这么大吗?索引太多可能会导致一些滞后,但由于缺乏对实际内容的了解而无法明确表示。

我会从复合索引开始,而不是按照指示的方式进行分区。