このクエリの実行には20〜40秒かかります。私はできるだけそれを大きくスピードアップする必要があります。この複雑なクエリをより速く実行させるにはどうすればよいですか?
SELECT DISTINCT a.category, a.key
FROM system_permissions AS a, system_permission_to_role AS b,
system_user_to_role AS c, system_users AS d
WHERE
(
(
a.system_permission_id=b.system_permission_id
AND (b.system_role_id=c.system_role_id || c.system_role_id = 0)
AND a.system_permission_id NOT IN (
SELECT system_permission_id FROM system_permission_exclusions AS f
WHERE d.system_user_id=f.system_user_id
)
AND c.system_user_id=d.system_user_id
)
OR a.system_permission_id IN (
SELECT system_permission_id
FROM system_permission_inclusions AS g
WHERE d.system_user_id=g.system_user_id
)
)
AND d.ldap_objectguid = '?';
このようにそれをやって背後にある理由は、私は私が役割の一部ですが、中に存在するものを排除する必要があるので、まず、標準定義された役割の範囲外の権限の除外とインクルージョンのテーブルを作成していますということです除外テーブルを作成したら、役割の一部ではないが包含テーブルに存在するものを追加する必要があります。
私はテーブルを再設計するという考え方にもオープンしています。
まず、クエリの実行計画を確認してください。 – randominstanceOfLivingThing
私はあなたがそのことを意味するのか分かりません。私は質問をはっきりと表現し、コードを完全に投稿したと思ったときに私の質問に否定的な評価(ハッ?質問。 – TBowman
質問は私には合理的だと思う。一部の人はちょうどお尻です。 – CptMisery