我有4个mysql表,并且在多个表上使用JOIN进行单个查询,我通过jquery ajax请求它,但是需要太长时间,大约需要1-3分钟,而我想平均执行它们2- 5秒。
有快速执行查询的特殊方法吗?
答案 0 :(得分:5)
有多种方法可以优化查询。
使用示例SQL的更详细的问题也会有所帮助。
答案 1 :(得分:2)
使用连接,加速操作的主要操作是在ON子句中的字段上创建索引。
答案 2 :(得分:2)
SELECT
DISTINCT *
FROM
posts s
JOIN
budy f ON s.userid = f.fid AND s.time >= f.f_since OR s.userid='$thisid'
WHERE
f.myid='$thisid'
GROUP BY
s.pid DESC
LIMIT 20
查看您的查询,我认为您的JOIN是罪魁祸首。我从未见过附加布尔条件的连接语法,所以我不确定如果不直接在mysql上测试它会如何表现。
明显的想法:
您是否尝试重写查询以查看您的时间是否可以改善?也许这可能会产生影响:
SELECT
DISTINCT *
FROM
posts s
JOIN
budy f ON s.userid = f.fid
WHERE
s.userid='$thisid'
s.time >= f.f_since
GROUP BY
s.pid DESC
LIMIT 20
由于我不确定您的表格中有哪些数据以及您希望看到的连接结果,我无法确定我的查询是否符合您的要求。你需要先检查它们。另外,不要忘记使用EXPLAIN命令找出mysql想要对你的查询做什么。
答案 3 :(得分:2)
我发现你编写查询的方式可能意味着执行时间小时或几天到5毫秒之间的差异(非常大的数据库上的实际结果)。
我做的一些事情是学习读取EXPLAIN结果(这是你用来查找MySQL如何理解你的查询的最有价值的工具)使用子查询而不是连接,如果数据库指定了“索引提示”不使用正确的索引,添加组合索引(primary,column_1,column_2)并附加“straight_join”以强制数据库按照您指定的顺序连接表。
答案 4 :(得分:2)
首先,使用EXPLAIN查找瓶颈! EXPLAIN告诉您有关查询执行方式的详细信息。这应该始终是优化查询(添加索引,重写查询等等)的第一个起点。
答案 5 :(得分:2)
回答你的实际问题。没有。没有特殊的方法可以快速查询。我们并没有全部使用秘密的“FAST”参数,并且在您使用较慢的查询时会大笑。
答案 6 :(得分:1)
绝对是索引。但也许你的数据库结构不合理。
您可能想尝试审核数据库 - 请参阅http://dev.mysql.com/doc/refman/4.1/en/account-activity-auditing.html
答案 7 :(得分:1)
如果没有查看架构,行大小,数据库中的行数以及典型查询的相同统计信息,则无法告知错误的位置。与pdwalker不同,我在join语句中看到过条件表达式,但我仍然不知道你的查询是做什么的。我怀疑它是一个非常聪明的代码或非常愚蠢的代码。
99%的情况下,可以通过调整查询/架构来解决这些问题。对于其他1%,您需要查看您的基础设施 - 例如拥有数据库集群(即使它是主/从)而不是单个节点。
下进行。