我正在为我的项目(PHP+MySQL)寻求更高的性能,但有一个查询似乎太慢(从 1 个表中选择 2 个随机用户)
id | name | total | img
------------------------ --
1 user1 500 1
2 user2 600 2
3 user3 650 3
__
SELECT id1, id2, name1, name2, img1, img2, total1, total2
FROM (
SELECT
C1.id AS id1, C1.img AS img1, C1.name AS name1,
C2.id AS id2, C2.img AS img2, C2.name AS name2,
C1.total AS total1, C2.total AS total2
FROM users C1, users C2
WHERE C1.id <> C2.id
AND ABS(C1.total - C2.total) < 200
) as t
ORDER BY RAND()
LIMIT 1
结果
id1 | id2| name1 | name2 | img1 | img2 | total1 | total2
------------------------ -------------------------------------
1 3 user1 user3 1 3 500 650
有什么办法可以改善吗?
最佳答案
确保您为 where 子句中的所有列创建了索引:
CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) NOT NULL ,
`total` INT NOT NULL ,
`img` INT NOT NULL ,
INDEX ( `total`)
);
另请注意,以下查询(不带子查询)将为您提供相同的结果
SELECT
C1.id AS id1, C1.img AS img1, C1.name AS name1,
C2.id AS id2, C2.img AS img2, C2.name AS name2,
C1.total AS total1, C2.total AS total2
FROM users C1, users C2
WHERE C1.id <> C2.id
AND ABS(C1.total - C2.total) < 200
ORDER BY RAND()
LIMIT 1
您可以通过sql fiddle查看。
关于php - SELECT FROM 子查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283112/