我有一个独立的表,我们通过每周的作业插入它的数据,并在我们的搜索模块中检索数据。
这个表有大约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/