我有2個表如下:MySQL中,JOIN和GROUP BY查詢使用臨時和文件排序
CREATE TABLE
ox_campaigns
(
campaignid
MEDIUMINT(9)NOT NULL的auto_increment,
campaignname
VARCHAR(255) NOT NULL默認 '',
clientid
MEDIUMINT(9)NOT NULL默認 '0',
is_deleted
TINYINT(1)NOT NULL默認 '0',
PRIMARY KEY(campaignid
),
KEYox_campaigns_clientid
(clientid
)
)ENGINE = MyISAM的默認字符集= UTF8CREATE TABLE
ox_clients
(
clientid
MEDIUMINT(9)NOT NULL的auto_increment,
agencyid
MEDIUMINT(9)NOT NULL默認' 0',
clientname
varchar(255)NOT NULL default'',
is_deleted
tinyint(4)NOT NULL,
PRIMARY KEY(clientid
),
UNIQUE KEYox_clients_account_id
(account_id
),
KEYox_clients_agencyid
(agencyid
)
)ENGINE = MyISAM的默認字符集= UTF8
一個客戶可以有很多活動鏈接到它。
我有一個與我的campaignid列表,我想要的是這些活動的不同clientids列表。
,我使用的查詢是:
+----+-------------+-----------+--------+-------------------------------+------+--------------------------------------------------------------------------------------------------------------------
| id | select_type | table | type | possible_keys | key | key_len| ref | rows| Extra |
+----+-------------+-----------+--------+-------------------------------+--------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | campaigns | range | PRIMARY,ox_campaigns_clientid | PRIMARY | 3 | NULL | 2 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | clients | eq_ref| PRIMARY | PRIMARY | 3 | openx.campaigns.clientid | 1 | Using where
爲什麼它是使用臨時和filesorting此查詢:
SELECT clients.*
FROM
clients clients
JOIN
campaigns campaigns ON clients.clientid = campaigns.clientid
WHERE
campaigns.is_deleted=0
AND campaignid in (2325,2395)
AND clients.is_deleted=0
GROUP BY clients.clientid
,它給的解釋輸出?
什麼是GROUP BY? – Strawberry
@Strawberry,實際上一個客戶可以有多個活動鏈接到它,並且我只需要相應的活動ID的不同客戶端信息 – debaShish
對此使用DISTINCT。在某些情況下,GROUP BY會產生意想不到的結果。雖然MySQL原諒了這個活動,但是GROUP BY不應該用於沒有任何聚合函數的情況。請注意,這不是性能問題。 – Strawberry