sql >> データベース >  >> RDS >> Mysql

SymfonyのACLを使用する場合、JOINクエリまたはIN配列クエリを使用する方が良いですか?

    両方の場合の時間計算量を見てみましょう:

    アレイアプローチ: M rowsのエンティティテーブル 、size NのACLエントリ配列 (ACLテーブルの行はここでは関係ありません)

    時間計算量 :O [N * log(M)]

    アプローチに参加する: M rowsのエンティティテーブル 、N rowsのACLテーブルを使用

    時間計算量 :O [M + N]

    実際には、一般的に次のような状況になります。

    アレイ内

    N=10,000
    M=1,000,000
    O=>60,000
    

    参加

    N=10,000
    M=1,000,000
    O=>1,010,000
    

    そして理論的には、アレイ内の最悪のシナリオは

    アレイ内

    N=1,000,000,000
    M=1,000,000,000
    O=>9,000,000,000
    

    参加

    N=1,000,000,000
    M=1,000,000,000
    O=>2,000,000,000
    

    これはどういう意味ですか?要約/TL;DR

    各ユーザーにエンティティ内のオブジェクトの一部へのアクセスのみが許可されている場合は、IN配列を使用します。

    各ユーザーがエンティティのすべてのオブジェクトのACLエントリを持つ場合は、JOINを使用します。ゲインは数桁にはなりませんが(数兆の製品がない限り)、INアレイを使用することをお勧めします。

    どちらの場合も、絶対に必要な場合にのみACLを使用してください。有権者FTW!




    1. 同じテーブルとフィールド名を持つ異なるデータベースからフィールドを選択する方法

    2. array_agg()を使用した関数の戻り値タイプ

    3. FlaskSQLAlchemyを使用したSQLiteからMySQLへの切り替え

    4. DBMS_METADATA およびその他のパッケージが無効です