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

Postgres9.1でクエリの更新が遅すぎる

    これは解決策ではありませんが、データモデリングの回避策です

    • URLを{protocol、hostname、pathname}コンポーネントに分割します。
    • 完全一致を使用してホスト名部分を結合できるようになり、正規表現一致の先頭の%を回避できます。
    • このビューは、必要に応じてfull_urlを再構築できることを示すことを目的としています。

    更新にはおそらく数分かかる可能性があります。

    SET search_path='tmp';
    
    DROP TABLE urls CASCADE;
    CREATE TABLE urls
            ( id SERIAL NOT NULL PRIMARY KEY
            , full_url varchar
            , proto varchar
            , hostname varchar
            , pathname varchar
            );
    
    INSERT INTO urls(full_url) VALUES
     ( 'ftp://www.myhost.com/secret.tgz' )
    ,( 'http://www.myhost.com/robots.txt' )
    ,( 'http://www.myhost.com/index.php' )
    ,( 'https://www.myhost.com/index.php' )
    ,( 'http://www.myhost.com/subdir/index.php' )
    ,( 'https://www.myhost.com/subdir/index.php' )
    ,( 'http://www.hishost.com/index.php' )
    ,( 'https://www.hishost.com/index.php' )
    ,( 'http://www.herhost.com/index.php' )
    ,( 'https://www.herhost.com/index.php' )
            ;
    
    UPDATE urls
    SET proto = split_part(full_url, '://' , 1)
            , hostname = split_part(full_url, '://' , 2)
            ;
    
    UPDATE urls
    SET pathname = substr(hostname, 1+strpos(hostname, '/' ))
            , hostname = split_part(hostname, '/' , 1)
            ;
    
            -- the full_url field is now redundant: we can drop it
    ALTER TABLE urls
            DROP column full_url
            ;
            -- and we could always reconstruct the full_url from its components.
    CREATE VIEW vurls AS (
            SELECT id
            , proto || '://' || hostname || '/' || pathname AS full_url
            , proto
            , hostname
            , pathname
            FROM urls
            );
    
    SELECT * FROM urls;
            ;
    SELECT * FROM vurls;
            ;
    

    出力:

    INSERT 0 10
    UPDATE 10
    UPDATE 10
    ALTER TABLE
    CREATE VIEW
     id | proto |    hostname     |     pathname     
    ----+-------+-----------------+------------------
      1 | ftp   | www.myhost.com  | secret.tgz
      2 | http  | www.myhost.com  | robots.txt
      3 | http  | www.myhost.com  | index.php
      4 | https | www.myhost.com  | index.php
      5 | http  | www.myhost.com  | subdir/index.php
      6 | https | www.myhost.com  | subdir/index.php
      7 | http  | www.hishost.com | index.php
      8 | https | www.hishost.com | index.php
      9 | http  | www.herhost.com | index.php
     10 | https | www.herhost.com | index.php
    (10 rows)
    
     id |                full_url                 | proto |    hostname     |     pathname     
    ----+-----------------------------------------+-------+-----------------+------------------
      1 | ftp://www.myhost.com/secret.tgz         | ftp   | www.myhost.com  | secret.tgz
      2 | http://www.myhost.com/robots.txt        | http  | www.myhost.com  | robots.txt
      3 | http://www.myhost.com/index.php         | http  | www.myhost.com  | index.php
      4 | https://www.myhost.com/index.php        | https | www.myhost.com  | index.php
      5 | http://www.myhost.com/subdir/index.php  | http  | www.myhost.com  | subdir/index.php
      6 | https://www.myhost.com/subdir/index.php | https | www.myhost.com  | subdir/index.php
      7 | http://www.hishost.com/index.php        | http  | www.hishost.com | index.php
      8 | https://www.hishost.com/index.php       | https | www.hishost.com | index.php
      9 | http://www.herhost.com/index.php        | http  | www.herhost.com | index.php
     10 | https://www.herhost.com/index.php       | https | www.herhost.com | index.php
    (10 rows)
    


    1. 3つの簡単なSQLServerパフォーマンスの勝利

    2. AmazonRDSポイントインタイムリカバリとClusterControlの比較

    3. PostgreSQL:複数のテーブルに影響する制約

    4. MySQL GaleraCluster4.0をAmazonAWSEC2にデプロイする