mysql - Mysql大表优化

标签 mysql sql database performance

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

现在它有超过 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/

相关文章:

MySQL 查询显示不正确

MySQL用户创建日期、修改日期

mysql - 数据库设计: how to effectively manage about 4000 databases with mysql

mysql - 将 R 模型中的拟合值插入 MySQL 表中

php - 使用 PHP 在 MySQL 数据库上实现编辑和删除按钮

mysql - 行数没有不同

php - 如何在触发器中将值从一个查询传递到另一个查询

php, MySQL 和包含 å, ä 和 ö 的变量逃逸问题

mysql - 使用左连接从多个表中删除行

java - 删除查询不起作用 java netbeans