微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我想减少 MYSQL 查询执行时间我的查询需要很长时间?

跟随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

解决方法

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

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_sort_order DESC);

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

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

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

你以后可以自己做这种事情。 StackOverflow 的目的是让人们自给自足。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。