我想减少 MYSQL 查询执行时间。我的查询需要很长时间?

Posted

技术标签:

【中文标题】我想减少 MYSQL 查询执行时间。我的查询需要很长时间?【英文标题】:I woul like to Reduce MYSQL Query Execution time.my query taking long time? 【发布时间】:2021-04-26 11:54:59 【问题描述】:

以下 mysql 查询需要很长时间才能执行 如何减少执行时间任何解决方案?该表包含超过 1000 条记录我正在尝试根据产品表中的价格 (prd_price) 更新排序顺序 (prd_sort_order)

SQl:-

SET @rank = 0;
    UPDATE tbl_products p SET p.prd_sort_order=@rank:=@rank+1
     WHERE p.prd_booking_status=1 
       AND p.prd_status=1
     ORDER BY p.prd_price DESC

【问题讨论】:

请注意,这不是 SQL 查询,而是使用多个 SQL 查询的 php 函数。请edit您的帖子向我们展示SQL查询本身;这将帮助您获得更好的答案。而且,涉及到什么版本的 MySQL? 您尝试过什么解决问题的方法? 如何减少执行时间?执行需要很长时间 什么是“它”?这些查询中哪一个很慢?你有什么办法让它更快? SET @rank = 0;更新 tbl_products p SET p.prd_sort_order=@rank:=@rank+1 WHERE p.prd_booking_status=1 AND p.prd_status=1 ORDER BY p.prd_price DESC 【参考方案1】:

在我看来,您的代码使用了以下模式的查询:

SET @rank = something;

UPDATE tbl p SET p.prd_sort_order=@rank:=@rank+1
 WHERE p.prd_booking_status=1 
   AND p.prd_status=1
 ORDER BY p.prd_price DESC
 
SELECT MAX(prd_sort_order) as prd_sort_order FROM tbl
 WHERE prd_booking_status = 1
   AND prd_status=1

表上的特定复合索引将对您的更新查询有很大帮助。您可以像这样从 phpmyadmin 之类的 sql 客户端创建它。

CREATE INDEX tbl_price_sort_order 
          ON tbl (booking_status, prd_status, prd_price DESC);

之所以有效,是因为您的查询可以随机访问具有匹配预订和 prd 状态的第一行的索引,然后按顺序读取索引以获得正确顺序的行。

同样,您的选择查询可以使用此索引。

CREATE INDEX tbl_prd_sort_order 
          ON tbl (booking_status, prd_status, prd_sort_order DESC);

注意:如果两个用户同时运行这个 php 程序,你很可能会遇到垃圾。尝试以 START TRANSACTION; 开头这一系列查询并以 COMMIT; 结尾以避免并发混淆。

我是如何解决这个问题的?

    我将 SQL 查询与所有 php 内容隔离开来。我希望你这样做了,但这没关系。 我在它们之间寻找一个通用的 WHERE 和 ORDER BY 模式。 我使用了我的 knowledge of database indexes(来自 Marcus Windand 的在线书籍)来找出对您有帮助的索引。

你以后可以自己做这种事情。 *** 的重点是让人们自给自足。

而且,不得不说,这个应用程序的设计方式,不可能很快。此代码每次运行时都会更新表中的大部分行,这需要时间。 随着您的表变大,需要更多时间:O(n)。这不好。当您从表中查找内容时,最好在您使用的 SELECT 查询中执行此价格排名工作。随时问另一个问题。

【讨论】:

以上是关于我想减少 MYSQL 查询执行时间。我的查询需要很长时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何减少这个mysql查询执行时间

如果使用 ORDER BY String Column,MySQL 查询需要很长时间才能执行

减少大型查询的执行时间

SQL 查询需要时间执行

减少查询响应时间,需要优化查询

需要减少查询时间