У меня есть дизайн базы данных, который имеет отдельную базу данных для отдельных данных клиентов. База данных имеет таблицу данных, которая в данный момент содержит за один месяц ~ 4 миллиона строк.
Для запросов я создаю пользовательские представления, которые сопоставляют идентификатор клиента с конкретной базой данных. Виды выглядят так:
CREATE ALGORITHM = MERGE VIEW DataView AS
SELECT
100 AS CustomerID,
c1db.Data.*
FROM
Customer100_DB c1db
UNION ALL
SELECT
101 AS CustomerID,
c2db.Data.*
FROM
Customer101_DB c2db;
Теперь мои запросы обычно выглядят так:
SELECT COUNT(*) FROM DataView WHERE CustomerID = ... AND ....;
Моя проблема заключается в том, что соответствующий индекс в таблице данных не используется при запросе представления, если оно содержит как минимум 2 базы данных.
То есть при удалении [...] UNION ALL SELECT ... [...] из представления используется точный индекс или при прямом запросе к таблице данных.
Есть ли здесь проблема с дизайном, или я могу дать оптимизатору больше шансов снизить индекс (используя MariaDB 10.3)?