2017-01-30 9 views
1

У меня проблема с запросом с использованием JOIN и MAX/MIN. Например:mysql table join with max()

SELECT Min(a.date), Max(a.date) 
FROM a 
INNER JOIN b ON b.ID = a.ID AND b.cID = 5 

Его можно добавить к индексу или изменить этот результат запроса было лучше? Ниже результат объяснить

+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref  | rows | Extra     | 
+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+ 
| 1 | SIMPLE  | b  | ref | PRIMARY,cID  | cID | 5  | const  | 680648 | Using index   | 
| 1 | SIMPLE  | a  | ref | ID    | ID | 5  | base.b.ID |  1 | Using index condition | 
+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+ 

Извините, но я бы не ставил здесь всю таблицу, и может сделать много путаницы.

CREATE TABLE `a` (
    `ID` int(11) NOT NULL, 
    `date` datetime DEFAULT, 
    PRIMARY KEY (`ID`), 
    KEY `date` (`date`), 
) 

CREATE TABLE `b` (
    `bID` int(11) NOT NULL, 
    `ID` int(11) NOT NULL, 
    `cID` int(11) DEFAULT, 
    PRIMARY KEY (`bID`), 
    KEY `cID` (`cID`), 
) 
+0

Пожалуйста, попробуйте объяснить, что результат был лучше. Вы хотите получить больше полей, быстрее, ...? – McNets

+1

Предоставьте инструкции SHOW CREATE TABLE для всех соответствующих таблиц, а также – Strawberry

+0

Да, я имею в виду запрос времени выполнения. Я знаю, как использовать индекс для ускорения результатов MAX и MIN в одном запросе, но я ищу решение для версии с JOIN. – SilverRAT

ответ

2
b: INDEX(cID, ID) 

сделает что «покрытие» индекса, так что, вероятно, получите через 680648 строк быстрее. Он должен заменить текущий KEY(cID).

Key_len для b - 5. Это не согласуется с определением таблицы; что-то слишком упростилось.

+0

'^ 1' Не могли бы вы помочь мне на этом http://stackoverflow.com/questions/41932151/how-to-get-ids-of-4-distinct-values-combination-of-2-keys – user3637224

+0

Он делает не помогите, потому что нужно получить 680648 строк для поиска max и min. Обычно, если добавить индекс INDEX (cID, date) в таблицу max и min, работа меняется быстро, но теперь она работает с JOIN. – SilverRAT

+1

@SilverRAT - 'cID' и' date', кажется, находятся в разных таблицах, поэтому индекс не может работать? –