[英]Simplify Self Join SQL
我目前正在執行以下聯接,並且執行查詢需要很長時間,是否可以使它運行更快? 我在表中有23個字段。 我在字段'id'(int)5 reg(varchar)9上有一個主鍵
SELECT a1.*, ( SELECT COUNT(reg) FROM auction a2 WHERE reg = a1.reg) AS c1 FROM auction a1
CREATE TABLE IF NOT EXISTS `db1` (
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`adate` varchar(10) NOT NULL,
`lnu` int(4) NOT NULL,
`reg` varchar(9) NOT NULL,
`mk` varchar(50) NOT NULL,
`mod` varchar(50) NOT NULL,
`type` varchar(25) NOT NULL,
`ree` varchar(50) NOT NULL,
`co` varchar(50) NOT NULL,
`fu` varchar(20) NOT NULL,
`tran` varchar(20) NOT NULL,
`mt` varchar(9) NOT NULL,
`mile` int(6) NOT NULL,
`ree` int(6) NOT NULL,
`apv` int(6) NOT NULL,
`ds` int(2) NOT NULL,
`sr` varchar(50) NOT NULL,
`sen` int(10) NOT NULL,
`keep` int(2) unsigned NOT NULL,
`tmp` char(1) DEFAULT NULL,
`rk` varchar(100) DEFAULT NULL,
`st` varchar(3) DEFAULT NULL,
`dd` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date` (`adate`)
如前所述,如果您唯一的索引是(id,reg)上的主鍵,那么通過單獨添加(reg)上的索引將大大加快此查詢的速度。
從您當前的模式看,您應該在reg
列上提供了index
。
SELECT a1.*, a2.totalCount
FROM auction a1
INNER JOIN
(
SELECT reg, COUNT(*) totalCount
FROM auction a2
GROUP BY reg
) a2
ON a2.reg = a1.reg
您是否嘗試過使用子查詢:
SELECT a1.*, a2.cnt
FROM auction a1
INNER JOIN
(
SELECT COUNT(reg) cnt, reg
FROM auction
GROUP BY reg
) a2
on a1.reg = a2.reg
您有2個選擇:
在連接列上有一個索引,即reg。 這可能有助於加快查詢速度。
使用CTE。
使用CTE001 AS(選擇count( )作為GroupCount,從reg中的reg分組中選擇reg)選擇a。 ,來自CTE001的c.GroupCount c內部聯接拍賣a。c.reg = a.reg;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.