Вот моя проблема, я выбираю и делаю несколько объединений для получения правильных элементов... он тянет в большом количестве строк, выше 100 000. Этот запрос занимает более 5 минут, если для диапазона дат установлено значение 1 год.
Я не знаю, возможно ли это, но я боюсь, что пользователь может расширить диапазон дат до десяти лет и свернуть его.
Кто-нибудь знает, как я могу ускорить это? Вот запрос.
SELECT DISTINCT t1.first_name, t1.last_name, t1.email
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.CU_id = t2.O_cid
INNER JOIN table3 AS t3 ON t2.O_ref = t3.I_oref
INNER JOIN table4 AS t4 ON t3.I_pid = t4.P_id
INNER JOIN table5 AS t5 ON t4.P_cat = t5.C_id
WHERE t1.subscribe =1
AND t1.Cdate >= $startDate
AND t1.Cdate <= $endDate
AND t5.store =2
Я не самый лучший с mysql, поэтому любая помощь будет оценена!
Спасибо заранее!
UPDATE
Вот объяснение, которое вы просили
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t5 ref PRIMARY,C_store_type,C_id,C_store_type_2 C_store_type_2 1 const 101 Using temporary
1 SIMPLE t4 ref PRIMARY,P_cat P_cat 5 alphacom.t5.C_id 326 Using where
1 SIMPLE t3 ref I_pid,I_oref I_pid 4 alphacom.t4.P_id 31
1 SIMPLE t2 eq_ref O_ref,O_cid O_ref 28 alphacom.t3.I_oref 1
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 alphacom.t2.O_cid 1 Using where
Также я добавил индекс в строки table5 и table4, потому что они действительно не изменяются, однако другие таблицы получают около 500-1000 записей в месяц... Я слышал, вы должны добавить индекс в таблицу, которая имеет много новых записей.... это правда?