Вот моя проблема, я выбираю и делаю несколько объединений для получения правильных элементов ... он тянет в большом количестве строк, превышающих 100 000. Этот запрос занимает более 5 минут, если для диапазона дат установлено значение 1 год.Как я могу ускорить запрос MySQL с несколькими объединениями
Я не знаю, возможно ли это, но я боюсь, что пользователь может расширить диапазон дат до десяти лет и свернуть его.
Кто-нибудь знает, как я могу ускорить это? Вот запрос.
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 записей в месяц ... Я слышал, вы должны добавить индекс в таблицу, в которой есть много новых записей .... это правда?
Это поможет узнать таблицы и индексирование на месте - пожалуйста, обновите, чтобы включить инструкции CREATE TABLE. Необходимость 'DISTINCT' заставляет меня задаться вопросом, за какую таблицу (-ы) отвечает за это. –
Помощник EXPLAIN тоже поможет. – ceejayoz
-OMG Ponies, я не знаю, что вы подразумеваете под операциями create table. -Ceejayoz, я добавил EXPLAIN – BinarySolo00100