如何优化 sql 查询以避免在没有 php.ini 或设置时间限制的情况下执行最长时间 [关闭]

Posted

技术标签:

【中文标题】如何优化 sql 查询以避免在没有 php.ini 或设置时间限制的情况下执行最长时间 [关闭]【英文标题】:How to optimize an sql query to avoid maximum time execution without php.ini nor setting time limit [closed] 【发布时间】:2021-10-15 18:21:51 【问题描述】:

我有 2 个表:一个有我的图像的 url,另一个有我优化图像的 url。我正在从按优化图像的 url 分组的表格中进行选择,但即使我 甚至将其限制为 12

,我仍会继续获得最大的致命执行时间
SELECT DISTINCT `ojm_pages_articles_photos`.`id_pages_articles_photos`, `ojm_pages_articles_photos`.`url_articles_photo`, `ojm_pages_articles_photos`.`id_ojm_peoples` AS `id_ojm_peoples_uploader` 
FROM `ojm_pages_articles_photos`, `ojm_images_optimized` 

WHERE ( (`ojm_pages_articles_photos`.`url_articles_photo`=`ojm_images_optimized`.`url_image_original` OR `ojm_images_optimized`.`url_image_optimized`='') AND ( `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%jpeg' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%jpg' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%JPEG' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%JPG' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%jpe' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%png' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%PNG' OR `ojm_pages_articles_photos`.`url_articles_photo` LIKE '%bmp' ) ) 

GROUP BY `ojm_images_optimized`.`url_image_optimized`, `ojm_pages_articles_photos`.`url_articles_photo`

ORDER BY `ojm_pages_articles_photos`.`id_pages_articles_photos` DESC, `ojm_images_optimized`.`optimized_is_smaller`='Oui' 

LIMIT 0,12

我不想增加最大执行时间(我知道如何在 php 中做到这一点,但我不想这样做)。

如何优化这个 sql 查询以避免在没有 php.ini 或设置时间限制的情况下执行最大时间?我只选择了 12,坦率地说,我不明白只有 12 的最大执行时间。

【问题讨论】:

PHP 的最大执行时间是指PHP 进程处理数据所花费的时间。等待数据库返回数据所花费的时间不构成限制。 (在 Windows 上运行时显然不是这样。) 如果没有相关的数据样本并查看您的架构,我们无法提供太多建议,这几乎是猜测。您是否已验证它实际上是问题所在的 SQL?如果您在 SQL 编辑器中独立运行 SQL,远离 PHP,它仍然很慢吗? 我会查看数据库本身,您可能需要一些索引。找到一个工具来解释查询是如何运行的以及各种瓶颈在哪里。因为您正在订购,所以限制可能也发生在 更复杂的逻辑之后,因此优化不会有太大作用。 GROUP BY 和 SELECT DISTINCT 是一个非常奇怪的组合,通常表明有些事情不对。 group by 子句的目的是什么,因为没有聚合? order by 子句中的 ...optimized... 是什么意思? 【参考方案1】:

where 子句中有很多通配符。服务器必须检查每一列的每一行以查看哪些匹配,并且它必须这样做才能对它们进行排序或限制它们。

如果所有这些通配符都是必需的,则需要向这些列添加索引以加快速度。

【讨论】:

以上是关于如何优化 sql 查询以避免在没有 php.ini 或设置时间限制的情况下执行最长时间 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

优化 SQL 查询以避免重复

如何避免两次编写 SQL Server 查询以避免重复?

优化 MySQL 查询以避免扫描大量行

如何避免多个子查询作为表达式(SQL优化)

你好 我的php连接不上SQL 在网站上找需要打开php.ini也没有搜索到 该如何解决

SQL 查询优化