Я новичок в сервисах MySQL и AWS RDS. Я просто считаю, что мой запрос к MySQL на небольшом экземпляре RDS занимает примерно более 5 секунд. Кроме того, я заметил с помощью CloudWatch, что ЦП rds всегда загружен на 100%. Размер моей базы данных сейчас составляет около 1 миллиона. Может ли кто-нибудь сказать мне, что я могу сделать, чтобы это исправить?
Один запрос выглядит так:
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 для всех операций, может быть, в этом проблема?
Я искал в Интернете эту проблему. Но я не совсем понимаю решения со страниц. Я начальный уровень для базы данных.
План EXPLAIN второго запроса выдает его. Вам нужен index.
Пункт WHERE familyName='Thompson' AND firstName='David'
это ключ.
Просто запустите следующее:
ALTER TABLE iApps ADD INDEX familyName_firstName_ndx (familyName,firstName);
Уверяю вас, это ускорит этот конкретный запрос. Другие запросы, у которых другие WHERE
для статей потребуются разные индексы.
Что касается скачка мощности процессора, это не должно вызывать удивления. Полное сканирование таблицы с 1 миллионом строк будет перемещать данные в буферный пул InnoDB и из него. Помните, что журналы транзакций в Amazon RDS всегда имеют одинаковый размер (innodb_log_file_size = 128M) для всех семи моделей RDS. Транзакции, которые проходят через те же строки, которые вы выбираете, также будут влиять на использование ЦП, поскольку они также управляют журналами транзакций.