Name Type Collation Null Default
1 sms_id int(7) None AUTO_INCREMENT
2 users_id int(5) NULL NULL
3 sms_number varchar(9) No None
4 sms_amount varchar(7) No None
6 server_id tinyint(2) Yes NULL
7 sms_device varchar(1) No None
8 special_id int(6) Yes NULL
9 sms_ip varchar(32) No None
10 sms_adddate timestamp No CURRENT_TIMESTAMP
У меня есть эта таблица, что запись смс, отправленное с моего сайта я хочу, чтобы вычислить некоторые данные, такие как количество отправленных смс и сумму количества этого смс между два датой для каждого пользователь, но когда я выполнить мой запрос потребовалось много времени, чтобы сделали форму 20-30 секунд, потому что у меня есть миллионы записейMySQL запросы повышенная производительность зависит от даты
это мой MySQL запрос
select *,
(select count(sms_id) from sms where sms_adddate>11-11-2012 and sms_adddate<11-11-2013 and sms.users_id=users.users_id limit 1) as sms_count,
(select sum(sms_amount) from sms where
sms_adddate>11-11-2012 and sms_adddate<11-11-2013 and
sms.users_id=users.users_id limit 1) as sms_amount
from users limit 10
первичный ключ: sms_id внешнего ключа: users_id, server_id, spicial_id
все мои таблицы - это движок InnoDB, и у меня уже есть отношения между ним.
Что я могу сделать, чтобы ускорить этот запрос? Неправильно добавить индекс в sms_amount и sms_adddate или что?
индексов должны быть на столбах, которые вы используете для поиска записей ... те, которые появляются в той части. поэтому, для sms_adddate, да, это хорошая идея –
какие индексы могут делать .. и если хорошо добавить в два столбца, могу ли я сделать это отдельно или вместе. Я имею в виду для каждого столбца, я делаю это или все вместе в тот же index @ naveed-hasan – hazem
@hazem Судя по этому запросу, похоже, что вам нужен индекс с несколькими столбцами через 'sms_adddate' и' user_id' –