我有一个独立的表,我们通过每周的作业插入它的数据,并在我们的搜索模块中检索数据。
这个表有大约400万条记录(而且会变得更大),当我执行直截了当的select查询时,需要很长时间(大约15秒)。我正在使用mysql数据库。
这是我的桌子结构

CREATE TABLE `myTable` (
  `myTableId` int(11) NOT NULL AUTO_INCREMENT,
  `date` varchar(255) DEFAULT NULL,
  `startTime` int(11) DEFAULT NULL,
  `endTime` int(11) DEFAULT NULL,
  `price` decimal(19,4) DEFAULT NULL,
  `total` decimal(19,4) DEFAULT NULL,
  `taxes` decimal(19,4) DEFAULT NULL,
  `persons` int(11) NOT NULL DEFAULT '0',
  `length` int(11) DEFAULT NULL,
  `total` decimal(19,4) DEFAULT NULL,
  `totalPerPerson` decimal(19,4) DEFAULT NULL,
  `dayId` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`myTableId`)
);

当我运行下面的语句时,检索结果大约需要15秒。
所以,如何优化它以更快的速度。
SELECT
    tt.testTableId,
    (SELECT
            totalPerPerson
        FROM
            myTable mt
        WHERE
            mt.venueId = tt.venueId
        ORDER BY totalPerPerson ASC
        LIMIT 1) AS minValue
FROM
    testTable tt
WHERE
        status is NULL;

请注意,testtable tble只有大约15条记录。

最佳答案

这是一个查询:

SELECT tt.testTableId,
       (SELECT mt.totalPerPerson
        FROM myTable mt
        WHERE mt.venueId = tt.venueId
        ORDER BY mt.totalPerPerson ASC
        LIMIT 1
       ) as minValue
FROM testTable tt
WHERE status is NULL;

对于子查询,需要mytable(venueId, totalPerPerson)上的索引。对于外部查询,索引是不必要的。但是,如果表更大,则需要在testTable(status, venueId, testTableId)上输入索引。

关于mysql - 从数百万条记录缓慢中选择一条记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34046825/

10-11 01:01