2012-10-02 27 views
1

我目前正在執行以下連接,執行查詢需要很長時間,有沒有辦法讓它運行得更快? 我在表中有23個字段。我在球場上 'ID'(INT)5 REG(VARCHAR)主鍵9簡化自我加入SQL

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`) 
+2

你只有'reg'的索引嗎? –

+0

我沒有,但添加了一個,根據評論在這裏:) – user1660680

回答

2

從您當前的模式看,您應該在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 
1

您是否嘗試過使用子查詢:

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

如果,如上所述,你只有索引是(id,reg)上的主鍵,那麼這個查詢將通過本身在(reg)上添加一個索引而大幅加快。

0

你有2種選擇:

  1. 對聯接列即REG的索引。這可能有助於加快查詢速度。

  2. 使用CTE。

隨着CTE001 AS ( SELECT COUNT()作爲GroupCount,由REG 拍賣組REG) 選擇。,c.GroupCount來自CTE001 c內連接拍賣a on c.reg = a.reg;