Мы внедряем систему, которая анализирует книги. Система написана на PHP, и каждая книга просматривает слова и анализирует каждое из них, устанавливая определенные флаги (которые переводятся в поля базы данных) из различных регулярных выражений и других тестов.
В результате получается таблица matches
, аналогичная приведенному ниже примеру:
+------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| regex | varchar(250) | YES | | NULL | |
| description | varchar(250) | NO | | NULL | |
| phonic_description | varchar(255) | NO | | NULL | |
| is_high_frequency | tinyint(1) | NO | | NULL | |
| is_readable | tinyint(1) | NO | | NULL | |
| book_id | bigint(20) | YES | | NULL | |
| matched_regex | varchar(255) | YES | | NULL | |
| [...] | | | | | |
+------------------------+--------------+------+-----+---------+----------------+
Большинство пропущенных полей: tinyint
, 0 или 1. В настоящее время в таблице соответствий имеется 25 полей.
В таблице соответствий ~ 2 000 000 строк, результаты анализа ~ 500 книг.
В настоящее время существует область «отчетов» сайта, которая запрашивает таблицу matches
, например:
SELECT COUNT(*)
FROM matches
WHERE is_readable = 1
AND other_flag = 0
AND another_flag = 1
Однако в настоящее время получение основного индекса занимает более минуты, поскольку каждый запрос занимает около 0,7 секунды. Я кеширую это на уровне запроса, но это все равно занимает слишком много времени для начальной загрузки страницы.
Поскольку я не очень опытен в управлении такими наборами данных, может ли кто-нибудь посоветовать мне лучший способ хранения или запроса этих данных? Есть ли какие-либо оптимизации, которые я могу использовать с MySQL для повышения производительности этих COUNT
s, или мне лучше использовать другую базу данных или структуру данных?
В настоящее время мы используем MySQL с таблицами MyISAM и VPS для этого, поэтому о переходе на новую систему баз данных вообще не может быть и речи.