gpt4 book ai didi

MySQL 自定义排序子查询影响性能

转载 作者:行者123 更新时间:2023-11-29 00:01:41 24 4
gpt4 key购买 nike

我有 1 个表,我从中返回搜索结果并按特定顺序显示它们。此示例是我的数据库结构的精确简化版本:http://www.java2s.com/Code/SQL/Select-Clause/Orderbyvaluefromsubquery.htm

这是我当前的代码,它可以工作但由于使用了子查询而在很大程度上影响了性能:

SELECT * FROM `table` AS p1
WHERE CONCAT(title,artist,creator,version) LIKE '%searchInput%'
ORDER BY
(SELECT
MAX(`rating`) FROM `table` AS p2 WHERE p1.setId=p2.setId
) DESC

上面的代码按照集合中的最高评分搜索和排序结果集,并且同一集合中的所有行都放在一起,例如:

id        setId      rating       title,artist,etc...
1 1 5
2 1 5
3 2 7
4 1 6
5 2 1
6 3 3

将排序为:

id        setId      rating       title,artist,etc...
3 2 7
5 2 1
4 1 6
1 1 5
2 1 5
6 3 3

目前查询 1000 行大约需要 8.5 秒,查询大量行需要半分钟以上,有没有什么方法可以提高性能,或者获取所有结果并在 PHP 内存中排序会更好吗?

非常感谢帮助

最佳答案

您可能可以通过分隔 LIKE 来加快速度:

SELECT p1.* FROM `table` AS p1
WHERE (title LIKE '%searchInput%')
OR (artist LIKE '%searchInput%')
OR (creator LIKE '%searchInput%')
OR (version LIKE '%searchInput%')
ORDER BY
(SELECT MAX(`rating`) FROM `table` AS p2 WHERE p1.setId=p2.setId) DESC

你也可以试试

CREATE INDEX tbl_ndx ON table(setId, rating)

提高排序性能。

关于MySQL 自定义排序子查询影响性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com