0
私は次のクエリを使用します。これは、ユーザーが情報をどのくらいまで埋めているかをパーセンテージで作成するために使用します。私はそれをビューとして保存しますが、クエリーは1500ユーザーに対して実行するのに約6分かかります。このクエリを高速化するにはどうすればよいですか?大量のクエリの最適化
これは、ユーザーがアクティブでない時間に毎日1回実行されるクエリとして使用されます。私たちは現在、ユーザーベースを急速に拡大しており、15,000人のユーザーが完全に間違ってしまうのではないかと心配しています。
だから、MySQLの教祖を喜んでください、私はあなたの助けを請う!
CREATE VIEW profile_check AS(
SELECT users.id,
FORMAT((IF(
COUNT(users.firstname)+
COUNT(users.lastname)+
COUNT(users.gender)+
COUNT(users.country)+
COUNT(users.address_one)+
COUNT(users.city)+
COUNT(users.zipcode)+
COUNT(users.housenumber)+
COUNT(users.phonenumber)+
COUNT(users.educationlevel_id) = 10, 1, 0) +
IF(
COUNT(assesspassionresults.user_id) > 0, 1, 0) +
IF(
COUNT(assessmentcompetencyresults.user_id) > 0, 1, 0) +
IF(
COUNT(assessmentstrengthresults.user_id) > 0, 1, 0) +
IF(
SUM(CASE WHEN timelines.component_of = "employer" THEN 1 ELSE 0 END) > 0, 1, 0) +
IF(
SUM(CASE WHEN timelines.component_of = "individual" THEN 1 ELSE 0 END) > 0, 1, 0) +
IF(
COUNT(interests.user_id) > 0, 1, 0) +
IF(
COUNT(skills.user_id) > 0, 1, 0) +
IF(
COUNT(users_mediafiles.user_id) > 0, 1, 0))/9 , 0) as profiel_check
FROM users
LEFT JOIN assesspassionresults
ON users.id = assesspassionresults.user_id
LEFT JOIN assessmentcompetencyresults
ON users.id = assessmentcompetencyresults.user_id
LEFT JOIN assessmentstrengthresults
ON users.id = assessmentstrengthresults.user_id
LEFT JOIN timelines
ON users.id = timelines.user_id
LEFT JOIN interests
ON users.id = interests.user_id
LEFT JOIN skills
ON users.id = skills.user_id
LEFT JOIN users_mediafiles
ON users.id = users_mediafiles.user_id
GROUP BY users.id);
MySQLの教祖の示唆したように
有用な答えを得るには、少なくともスキーマとEXPLAINを投稿する必要があります。 SQLFiddleはさらに優れています。 –
欠落している説明(およびおそらく欠落しているインデックス)は別として、正しい結果を得ていますか?あなたの質問は、私があなたが得たいと思うものをあなたに与えるものではないようです。または、むしろ:私はあなたの小切手がいつでもあなたに88,9%の価値を与えると思います。 – Solarflare
@NevilleK EXPLAINに追加しましたが、これが存在しないことを知りませんでした。 @ Solar Imが期待した結果を得ています。 – Adam