用 sonata-project/admin-bundle 做的后台,上线2个月左右,出现了一个性能问题,把调试工具打开发现在查询列表的时候 有2条SQL语句执行特别慢
以上两条SQL随着项目的增大,执行时间越来越长。目前150W左右数据执行时间需要 18058.10 ms
我猜想是 knplabs/knp-paginator-bundle 在分页和查询总数的时候 总数带上了关键字 "DISTINCT"
我把这两条语句的关键字 DISTINCT 去掉以后,直接拿到数据库执行只需要 5ms 。所以我去查找 symfony2、sonata-project/admin-bundle、knplabs/knp-paginator-bundle 对于这个关键字的处理或者配置,但是持续查找了快一个礼拜都没有结果。
希望有知道这个问题的大神能够帮助我分析分析
回复内容:
用 sonata-project/admin-bundle 做的后台,上线2个月左右,出现了一个性能问题,把调试工具打开发现在查询列表的时候 有2条SQL语句执行特别慢
以上两条SQL随着项目的增大,执行时间越来越长。目前150W左右数据执行时间需要 18058.10 ms
我猜想是 knplabs/knp-paginator-bundle 在分页和查询总数的时候 总数带上了关键字 "DISTINCT"
我把这两条语句的关键字 DISTINCT 去掉以后,直接拿到数据库执行只需要 5ms 。所以我去查找 symfony2、sonata-project/admin-bundle、knplabs/knp-paginator-bundle 对于这个关键字的处理或者配置,但是持续查找了快一个礼拜都没有结果。
希望有知道这个问题的大神能够帮助我分析分析
tuser_recharge.user_id 看上去必是 user.id 的子集,你在tuser_recharge(1.5m)上做DISTINCT,再怎么JOIN也没什么用,况且两个语句并不从user表关联取值,所以JOIN是多余的。
但真正的问题还是在tuser_recharge的数据量,1.5m数据作DISTINCT,哪怕user_id有索引也不影响DISTINC的执行,mysql会遍历整个索引,1.5m记录,假设索引里单记录执行花费0.00001秒,光遍历索引就需要大概0.000001x1500000=1.5秒,你画出的第一条语句的执行结果就在这个数量级上。
这你可以直接跑
<code>SELECT DISTINCT user_id FROM tuser_recharge </code>
来验证,速度会在一个数量级上。
第二条语句要慢很多,是因为除了遍历整个1.5m的索引,还需要产生临时表做SORT(因为ORDER BY),慢是可想而知的。
优化的思路,第一是看你是否有用WHERE的可能,即避免让DISTINCT遍历整个索引,而用WHER先缩小范围。
<code>SELECT DISTINCT user_id FROM tuser_recharge WHERE col = xxx </code>
如果业务不允许,那么最好的办法不是优化DINSTINCT,而是优化你的架构。通常操作思路是把前端代码和慢SQL语句解耦,做一个MYSQL SLAVE,用一个后台程序定时执行慢语句,把结果存入某个地方,前端语句直接读取这个结果,不经过mysql。这样的好处是前端不会再有伸缩性问题,坏处是牺牲了一定的实时性。如果你控制后台语句每一分钟执行一次,对一般业务也不至于产生什么问题。通常用户前端有一分钟或者几分钟的延迟并不是什么大问题。
这样做你在架构上的收益是最大的,因为一个慢语句的成本不只是这个慢语句本身,还会BLOCK其他语句的执行,这是在线系统数据库最应该避免的。

Symfony是一种基于PHP语言的高性能、可重复使用的web应用程序框架。它用于构建高质量的web应用程序和服务,并提供多种功能和工具来简化开发过程。Symfony的目标是使Web开发变得更加可用、可重复使用和高效,并且是一个开源框架,它遵循最佳的软件工程实践。对于PHP开发者来说,Symfony框架是一个非常好的选择,因为它提供了丰富而强大的灵活性,可以

随着信息技术的快速发展,企业管理系统越来越普及。其中,客户关系管理系统(CRM)是一种非常流行的企业管理系统。当今企业面临的最大挑战之一是如何有效地管理客户关系。开发一个高效的CRM系统就成了一个发展企业的核心任务。本文将介绍如何使用PHP框架Symfony,结合其丰富的功能和文档资料,来开发一款高效的CRM系统。一、了解Symfony框架Symfony是一

Symfony框架是一款流行的PHP框架,它的优势很多,本文将对于Symfony框架的优势进行探讨。高度的灵活性Symfony框架非常灵活,可以满足各种各样的需求。通过使用它的不同组件,你可以使用你自己的代码来构建自己的块,而无需使用强制性的体系结构。这使得Symfony框架成为开发出高度复杂的应用程序的理想选择。强大的安全性Symfony框架是一个非常安全

使用Symfony框架实现用户权限管理的步骤Symfony框架是一个功能强大的PHP开发框架,使用它可以快速开发出高质量的Web应用程序。在开发Web应用程序时,用户权限管理是一个不可忽视的重要部分。本文将介绍使用Symfony框架实现用户权限管理的步骤,并附带代码示例。第一步:安装Symfony框架首先,我们需要在本地环境中安装Symfony框架。可以通过

Symfony框架中间件:提供错误处理和异常管理功能当我们在开发应用程序时,经常会遇到错误和异常的情况。为了优化用户体验和提供更好的开发者工具,Symfony框架提供了强大的错误处理和异常管理功能。在本文中,我们将介绍Symfony框架中间件的使用和示例代码。Symfony框架中的错误处理和异常管理功能主要通过中间件来实现。中间件是一个特殊的功能组件,用于在

随着社交媒体应用的不断增长,越来越多的开发人员开始关注哪个框架最适合用来构建这样的应用。Symfony和Phalcon是两个非常受欢迎的PHP框架,它们都有着成熟的社区和强大的开发工具。但是如果你需要开发大规模的社交媒体应用程序,那么哪个框架更适合呢?Symfony是一个成熟的PHP框架,它提供了丰富的功能和工具,可以帮助你快速构建大型应用程序。Symfon

Symfony框架中的表单组件是一种非常有用的工具,可以帮助我们轻松地创建和验证表单,并与数据库进行交互。在本文中,我们将介绍如何在Symfony框架中使用表单组件。一、安装Symfony框架在开始之前,我们需要确保Symfony框架已经安装好并配置好依赖项。如果您尚未安装Symfony,可以通过以下命令在终端中安装:$curl-sShttps://g

随着Web应用需求的不断增长,开发者们在选择开发框架方面也越来越有选择的余地。Symfony和Yii2是两个备受欢迎的PHP框架,它们都具有强大的功能和性能,但在面对需要开发大型Web应用时,哪个框架更适合呢?接下来我们将对Symphony和Yii2进行比较分析,以帮助你更好地进行选择。基本概述Symphony是一个由PHP编写的开源Web应用框架,它是建立


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
