1

I am currently doing the following join and it takes a very long time to execute the query, is there a way to make it run quicker? I have 23 fields in the table. I have a primary key on the field '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

前述のように、唯一のインデックスが(id、reg)の主キーである場合、このクエリは、(reg)自体にインデックスを追加することで大幅に高速化されます。

于 2012-10-02T22:08:25.337 に答える
2

現在のスキーマから見ると、列に入力する必要がありindexますreg

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 に答える
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を使用する場合(GroupCountとしてcount()を選択し、regによってオークショングループからregを選択します)aを選択します。、CTE001からのc.GroupCount c.reg=a.regの内部参加オークションa;

于 2012-10-02T22:25:50.573 に答える