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

MySQLにURLを保存する方法

    DNS仕様 によると ドメイン名の最大長は次のとおりです:

    255 * 3 =765 <767(かろうじて:-))

    ただし、各コンポーネントの長さは63文字のみであることに注意してください。

    したがって、URLをコンポーネントビットに分割することをお勧めします。

    http://fooを使用します。 example.com/a/really/long/path?with=lots&of=query¶meters=that&goes=on&forever&and=ever

    おそらくこれで十分でしょう:

    • プロトコルフラグ["http"->0]( "http"を0として、 "https"を1として保存します。)
    • subdomain ["foo"](255-63 =192文字:min tldは2文字なので、さらに2を引くことができます)
    • domain ["example"]、(63文字)
    • tld ["com"]( "info" tldを処理するための4文字)
    • path ["a / really / long / path"](必要な限り-別のテーブルに保存
    • queryparameters ["with =lots&of =query&parameters =that&goes =on&forever&and =ever"](別のキー/値テーブルに保存
    • めったに使用されないポート番号/認証のものは、実際に必要な場合は別のキー付きテーブルに含めることができます。

    これにより、いくつかの優れた利点が得られます:

    • インデックスは、検索する必要のあるURLの部分にのみあります(小さいインデックス!)
    • クエリはさまざまなURL部分に制限できます(たとえば、FacebookドメインですべてのURLを検索します)
    • サブドメイン/ドメインが長すぎるURLは偽物です
    • クエリパラメータを簡単に破棄できます。
    • 大文字と小文字を区別しないドメイン名/tld検索を簡単に実行
    • シンタックスシュガーを破棄します(プロトコルの後の「://」、サブドメイン/ドメイン間の「。」、ドメイン/ tld、tldとパス間の「/」、クエリの前の「?」、「&」「=」クエリ)
    • 主要なスパーステーブルの問題を回避します。ほとんどのURLには、クエリパラメータも長いパスもありません。これらのフィールドが別のテーブルにある場合、メインテーブルはサイズに影響しません。クエリを実行すると、より多くのレコードがメモリに収まるため、クエリのパフォーマンスが向上します。
    • (ここでより多くの利点)


    1. CREATE FUNCTIONエラーこの関数には、DETERMINISTIC、NO SQL、またはREADSSQLDATAがありません。

    2. JSON_OBJECTAGG()–MySQLのクエリ結果からJSONオブジェクトを作成します

    3. MySQL:GROUP BYの非集計フィールドはどうなりますか?

    4. 長時間実行されるクエリ(MySql)、ApacheTomcatDataSourceを自動的に強制終了します