2017-01-30 3 views
1

JOINとMAX/MINを使用したクエリに問題があります。例:max()を使ったmysqlテーブルの結合

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)に置き換えてください。

bのKey_lenは5です。これはテーブル定義と一致しません。何かがあまりに単純化されました。

+0

'^ 1'これで私を助けてもらえますか?http://stackoverflow.com/questions/41932151/how-to-get-ids-of-4-distinct-values-combination-of-2-keys – user3637224

+0

maxとminを探すために680648行を取得する必要があるために役立たない。通常、テーブルにaを追加すると、最大と最小を知ることができますが、仕事は速く変化しますが、今はJOINで動作します。 – SilverRAT

+1

@ SilverRAT - 'cID'と' date'は異なるテーブルにあるようですので、インデックスは機能しませんか? –

関連する問題