Php 如何快速执行大型mysql查询
我有4个mysql表,在多个表上有一个带有JOIN的查询,我通过jQueryAjax请求它,但是它需要太长的时间,大约1-3分钟,而我希望平均2-5秒执行它们Php 如何快速执行大型mysql查询,php,jquery,Php,Jquery,我有4个mysql表,在多个表上有一个带有JOIN的查询,我通过jQueryAjax请求它,但是它需要太长的时间,大约1-3分钟,而我希望平均2-5秒执行它们 有什么特殊的方法可以快速执行查询吗?有多种方法可以优化查询 检查你的索引 执行一个大型查询并不总是比执行几个小型查询更快(检查每个查询的性能) 对于示例SQL,更详细的问题也会有所帮助。对于联接,加快速度的主要操作是在on子句中的字段上创建索引 SELECT DISTINCT * FROM posts s JOIN
有什么特殊的方法可以快速执行查询吗?有多种方法可以优化查询
对于示例SQL,更详细的问题也会有所帮助。对于联接,加快速度的主要操作是在on子句中的字段上创建索引
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
看看你的问题,我认为你的加入是罪魁祸首。我从未见过附加布尔条件的连接语法,因此如果不直接在mysql上测试它,我不确定它将如何运行
显而易见的想法:
- posts.userid是否已编制索引
- f.fid是否已编制索引
- 从那以后,波斯特时间和布迪福乌呢
- join语句上的AND或选项是否需要括号
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想要对您的查询做什么。肯定是索引。但也许你的数据库结构很差
您可能希望尝试审核数据库—请参阅,但不查看模式、行大小、数据库中的行数以及典型查询的相同统计信息—无法告知您出了什么问题。与pdwalker不同,我在join语句中看到了条件表达式,但我仍然不知道您的查询打算做什么。我怀疑它要么是一个非常聪明的代码,要么是一个非常愚蠢的代码 99%的情况下,这些问题可以通过调整查询/模式来解决。对于其他1%,您需要查看您的基础设施-例如,有一个数据库集群(即使它是主/从)而不是一个节点
C.我发现,如何编写查询可能意味着执行时间从几个小时或几天减少到5毫秒之间的差异(在非常大的数据库上的实际结果)
我所做的一些事情是学习使用子查询而不是连接来阅读解释结果(这是发现MySQL如何理解查询的最有价值的工具),指定一个“索引提示”,以防DB使用不正确的索引,添加组合索引(主索引、列\ 1、列\ 2)并附加“直接\连接”要强制数据库按指定的顺序联接表。首先,使用EXPLAIN查找瓶颈!EXPLAIN告诉您有关如何执行查询的详细信息。在优化查询(添加索引、重写查询等)时,这应该始终是您的第一个起点
回答您的实际问题。没有。没有特殊的方法可以快速查询。我们并不是一直在使用秘密的“FAST”参数,当您在缓慢的查询中挣扎时,我们会大笑。请添加更多信息,例如您正在使用的确切查询;Ajax和PHP代码;你正在做什么,以及到底是什么瓶颈使它如此缓慢。查询通常执行得很快。。。您确定问题出在查询中吗?。。。也许你在请求之后做了一些事情,这让它看起来很慢……如果有一种特殊的方法可以使查询速度更快,我相信DBMS已经将这种特殊的方法作为标准方法:)这是非常模糊的,抱歉。调查非规范化和具体化视图选择DISTINCT*FROM posts s JOIN budy f ON s.userid=f.fid和s.time>=f.f_since或s.userid='$thisid',其中f.myid='$thisid'GROUP BY s.pid DESC LIMIT 20这里是我的查询,我只得到了itI中包含的结果或帖子,我还怀疑使用DISTINCT的查询。它有一些有效的用途,但经常被用作坏数据或结构的支柱。事实上,分组保证了不一致性。。。