如何解决在亚马逊和CPU 100上的小型RDS实例上的缓慢查询MySQL

我对MySQL和AWS RDS服务都很陌生。 我只是发现我的查询到一个小的RDS实例的MySQL需要大约5秒多。 此外,我注意到CloudWatch rds的CPU总是被100%使用。 我的数据库的大小现在是100万左右。 可以告诉我,我能做些什么来解决这个问题?

一个查询是这样的:

mysql> EXPLAIN SELECT * FROM iApps; +----+-------------+--------------+------+---------------+------+---------+------+---------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------------+------+---------------+------+---------+------+---------+-------+ | 1 | SIMPLE | iApps | ALL | NULL | NULL | NULL | NULL | 1165255 | | +----+-------------+--------------+------+---------------+------+---------+------+---------+-------+ 1 row in set (0.04 sec) 

这是另一个查询:

 mysql> EXPLAIN SELECT * FROM iApps WHERE familyName='Thompson' AND firstName='David'; +----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+ | 1 | SIMPLE | iApps | ALL | NULL | NULL | NULL | NULL | 1166070 | Using where | +----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+ 1 row in set (0.08 sec) 

这里的时间很小,但是我的代码很慢。 我使用Python包mysqldb进行所有的操作,这可能是问题吗?

我在网上search这个问题。 但是我并没有真正从网页上获得解决scheme。 我是数据库的入门级。

第二个查询的EXPLAIN计划将其提供。 你需要一个索引。

WHERE familyName='Thompson' AND firstName='David'是线索。

只需运行以下内容:

 ALTER TABLE iApps ADD INDEX familyName_firstName_ndx (familyName,firstName); 

我可以向你保证,这将加快这个特定的查询。 其他具有不同WHERE子句的查询将需要不同的索引。

至于CPU秒杀,这应该不会是一个惊喜。 在一百万行的表上进行全表扫描会将数据推入和移出InnoDB缓冲池。 请记住,所有七个RDS模型的Amazon RDS中的事务日志总是相同的大小(innodb_log_file_size = 128M)。 正在通过相同的行传递的transacitons也会影响CPU使用率,因为它也处理事务日志。