【问题标题】:Simplify Self Join SQL简化自联接 SQL
【发布时间】:2012-10-02 22:05:12
【问题描述】:

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

【问题讨论】:

  • 只有reg 有索引吗?
  • 我没有添加一个,基于这里的 cmets :)

标签: mysql sql join self-join


【解决方案1】:

从您当前的架构来看,您应该在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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您是否尝试过使用子查询:

      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
      

      【讨论】:

        【解决方案4】:

        你有两个选择:

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

        2. 使用 CTE。

        使用 CTE001 AS ( 选择 count() 作为 GroupCount, reg from auction group by reg ) 选择a., c.GroupCount from CTE001 c inner join a on c.reg = a.reg;

        【讨论】:

          猜你喜欢
          • 2016-09-23
          • 2022-01-16
          • 2017-03-22
          • 2013-11-25
          • 2021-09-29
          • 1970-01-01
          • 2017-08-14
          • 2016-12-25
          • 2020-03-13
          相关资源
          最近更新 更多