mysql - 简化自连接 SQL

标签 mysql sql join self-join

我目前正在执行以下连接,执行查询需要很长时间,有没有办法让它运行得更快? 我在表中有 23 个字段。我在字段 'id' (int) 5 上有一个主键 注册 (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 列上提供 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

关于mysql - 简化自连接 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699062/

相关文章:

php - SQL:根据另一个单元格的值选择单元格的值

php - 在mysql中选择中间元素?

mysql - 将两个字段(相互依赖)关联到另一个表中的同一字段

c# - 将 datareader 值转换为可空变量

c# - 我需要解析 250 个文件,总计 1gb 的数据并将其上传到 SQL 服务器。我能比这更有效率吗?

php - 如何按照匹配的关键字数量的顺序显示结果?

MySQL - 无法将表的自动增量值设置为较低的值

mysql - 每个产品的最后订单时间戳

php - 对表 1 返回 ID 的查询,表 2 包含评级,如何通过在 Just 1 查询中加入表 1 和表 2 来获得 SUM 评级?

sql - 进行更有效的连接