У меня есть веб-сайт системы школьных баллов, созданный с использованием codeigniter с MySQL в качестве базы данных. Проблема в том, что в таблице точек много данных, и запись выполняется очень медленно.
В ней более 2 миллионов строк. Всякий раз, когда я обращаюсь к нему с большим количеством пользователей, это происходит очень медленно. Но этого не произошло, когда в этой таблице меньше данных. Это только медленно для этой части, но другие страницы загружаются быстро даже при большом количестве пользователей, одновременно обращающихся к нему. У меня даже есть приборная панель, которая рассчитывает все точки, и она быстрая.
Как мне заставить ее работать быстрее? Я уже разделяю свой веб-сервер и MySQL сервер. Мой сервер базы данных теперь имеет больше ресурсов в виде ЦП и ОЗУ.
Когда пользователи получают доступ к /dashboard
, php подсчитывает все очки пользователя. С этим проблем нет.
Однако при доступе к /points
и записи в базу данных она очень медленная.
Мне было интересно, смогу ли я сделать это так
----------points table--------
|username |points_a_sum|points_b_sum|points_c_sum|
user_a | 33 | 0 | 15
user_b | 15 | 12 | 0
Вместо:
username|type|points|date_added
user_a | points_a | 10 | date here
user_b | points_a | 5 | date here
user_a | points_c | 15 | date here
user_a | points_a | 8 | date here
user_b | points_b | 12 | date here
Но проблема с непосредственным перечислением суммы, мое приложение не может отследить, когда пользователь получает эти конкретные баллы.
Мое приложение write-heavy.
Есть предложения?
Попробуйте получить размер индекса с помощью этого запроса (https://dataedo.com/kb/query/mysql/list-of-tables-by-the-size-of-their-indexes ):
select table_schema as database_name,
table_name,
round(index_length/1024/1024,2) as index_size
from information_schema.tables
where table_type = 'BASE TABLE'
and table_schema not in ('information_schema', 'sys',
'performance_schema', 'mysql')
-- and table_schema = 'your database name'
order by index_size desc;