【发布时间】:2017-01-27 05:19:57
【问题描述】:
我计划从共享托管服务器切换到 AWS 设置(EC2 用于 apache/php,RDS 用于 MySQL)。
我的 php/mysql 站点的测试版在共享服务器上运行了一年多。特别是一页在浏览器中总是运行得很快(完全加载可能
在准备迁移时,我将数据库和所有表从 MyISAM 更改为 InnoDB。我还将默认字符集切换为 utf8mb4(是 latin-1 或其他),并将排序规则切换为 utf8mb4_unicode_ci。有几个类似于 varchar2(400) 的列被索引,导致 > 191 字符错误(因为使用 utf8mb4 从 3byte->4byte 移动)。我进去并手动将这些列切换到 UTF-8/utf_unicode_ci。一切似乎都很好(没有明确的错误)
现在,我已将站点/数据库的副本移至 AWS。大多数页面加载正常。特别是这个需要永远加载(> 5分钟)。我有一些非常小的 EC2 实例和 RDS 实例,所以我意识到这可能是一个问题,但我是唯一一个使用该站点(用于一个查询)的人,整个数据库小于 70MB。
运行解释计划显示在大多数情况下使用键(索引?)和一个具有 74k 行的“派生”表。 74k 是一个非常小的数据集。我对 Oracle 解释计划更加熟悉,所以我很难弄清楚发生了什么。
我尝试在共享主机服务器上运行原始页面,但速度也慢了很多!因此,我没有理由相信这是 AWS 问题。
我知道 MyISAM 在简单的场景下会快一点,但它不可能比我新使用的 InnoDB 快 10000000000000 倍?
在尝试为超过 191 个字符的 varchar 建立索引时,转换是否出现问题?是否有可能只是以某种方式破坏了系统/表格?如果您给它们大量时间,查询将完成,但它们不可能这么慢。我认为即使索引被炸掉并且它正在对 74k 行进行全表扫描,它也不应该出汗。
想法?
编辑: 找到这个线程: https://dba.stackexchange.com/questions/75091/why-are-simple-selects-on-innodb-100x-slower-than-on-myisam 发帖人似乎也有类似的减速体验。我不能使用与他/她相同的解决方案。认为我必须将所有要返回的列放入索引中是很疯狂的。这不可能是每个人都接受的吗?
【问题讨论】:
标签: mysql innodb amazon-rds myisam