我有一个表,用于缓存谷歌翻译 API 答案。 表结构是
现在它有超过 100 万行,group
字段中有 35000 个不同的值。
我使用的唯一查询类型是:
SELECT `orig_string`, `group`, `translated` FROM `Google_translate_cache` WHERE
(`group` = "?" AND
((`orig_string` = "?")
OR (`orig_string` = "?")
OR (`orig_string` = "?") ....
现在每个查询都需要超过 2 秒。
我尝试将查询更改为UNION
1,但结果是相同的。
此外,我尝试像这样对表进行分区 -
ALTER TABLE `Google_translate_cache`
PARTITION BY KEY(`orig_string`)
PARTITIONS 26;
但这也没有成功。
有什么加快速度的建议吗?
最佳答案
我可能是错的,但我不认为“orig_string”上的表分区确实是您想要的。相反,(group, orig_string) 上的复合索引有助于优化 where WHERE 子句限定符。现在,组列——真的有255个容量吗?当测试的原始字符串最大为 100 时,真的需要那么大吗?索引太多可能会导致一点滞后,但由于缺乏对实际内容的了解,无法明确地说。
我将从复合索引开始,而不是按照指示的方式进行分区。
关于mysql - Mysql大表优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22880664/