1

我目前正在执行以下连接,执行查询需要很长时间,有没有办法让它运行得更快?我在表中有 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`)
4

4 回答 4

2

从您当前的架构来看,您应该indexreg列上提供。

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
于 2012-10-02T22:08:42.953 回答
2

如前所述,如果您唯一的索引是 (id, reg) 上的主键,那么通过在 (reg) 上单独添加索引可以大大加快此查询的速度。

于 2012-10-02T22:08:25.337 回答
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
于 2012-10-02T22:08:18.460 回答
0

您有 2 个选项:

  1. 在连接列上有一个索引,即 reg 。这可能有助于加快查询。

  2. 使用 CTE。

使用 CTE001 AS (Select count( ) as GroupCount, reg from auction group by reg) 选择 a。, c.GroupCount 来自 CTE001 c 内部加入拍卖 a 上 c.reg = a.reg;

于 2012-10-02T22:25:50.573 回答