我有一张表用于缓存谷歌翻译API答案。 表结构是
现在它在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;
但这也没有成功。
有什么建议加快它吗?
答案 0 :(得分:0)
我可能错了,但我认为“orig_string”上的表分区并不是你想要的。相反,(group,orig_string)上的复合索引帮助优化WHERE子句限定符的位置。现在,使用组列 - 真正的255容量?当被测试的原始字符串最大值为100时,真的需要这么大吗?索引太多可能会导致一些滞后,但由于缺乏对实际内容的了解而无法明确表示。
我会从复合索引开始,而不是按照指示的方式进行分区。