PostgreSQL の複合主キーを使用するテーブルについて SELECT DISTINCT
クエリ速度が遅い理由と最適化方法
PostgreSQL データベースでは、SELECT DISTINCT
クエリの実行速度はテーブル構造とデータ分散に依存します。 tickers
テーブルの product_id
列は複合主キーの一部であるため、その列にインデックスが付けられますが、SELECT DISTINCT product_id FROM tickers
を使用して一意の product_id
を取得するクエリは、デフォルトで順次スキャンを実行します。
パフォーマンスが遅い理由
のパフォーマンスが遅い主な理由は、テーブル内に product_id
の重複した値があることです。これは、PostgreSQL が取得した一意の product_id
ごとにテーブル全体をスキャンして、重複がないことを確認する必要があることを意味します。
解決策: インデックス スキップ スキャンをシミュレートします
PostgreSQL はまだインデックス スキップ スキャンをネイティブにサポートしていないため、再帰 CTE (共通テーブル式) を使用してこの動作をシミュレートできます。この CTE は重複の取得と破棄を繰り返し、一意の各 product_id
の 1 つを除くすべてのインスタンスを効果的に除外します。
改善されたソリューション
WITH RECURSIVE cte AS ( ( -- 括号必需 SELECT product_id FROM tickers ORDER BY 1 LIMIT 1 ) UNION ALL SELECT l.* FROM cte c CROSS JOIN LATERAL ( SELECT product_id FROM tickers t WHERE t.product_id > c.product_id -- 横向引用 ORDER BY 1 LIMIT 1 ) l ) TABLE cte;
このクエリは水平結合を使用してソートされたテーブルを横断し、 orderBy
を使用して一意の product_id
値を取得します。
結論
SELECT DISTINCT product_id
クエリの実行時間は、CTE メソッドを使用してインデックス スキップ スキャンをシミュレートすることで大幅に改善され、それによって tickers
テーブルから一意の product_id
を取得するのに必要な時間を短縮できます。
以上がPostgreSQL の複合主キーを持つテーブルで SELECT DISTINCT が遅いのはなぜですか? 最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

mysqlviewshavelimitations:1)supportallsqloperations、制限、dataManipulationswithjoinsorubqueries.2)それらは、特にパフォーマンス、特にパルフェクソルラージャターセット

reperusermanmanagementInmysqliscialforenhancingsecurationsinginuring databaseaperation.1)usecreateusertoaddusers、指定connectionsourcewith@'localhost'or@'% '。

mysqldoes notimposeahardlimitontriggers、しかしpracticalfactorsdeTerminetheireffectiveuse:1)serverconufigurationStriggermanagement; 2)complentiggersincreaseSystemload;

はい、それはssafetostoreblobdatainmysql、butonsiderheSeCactors:1)Storagespace:blobscanconsumesificantspace.2)パフォーマンス:パフォーマンス:大規模なドゥエットブロブスメイズ階下3)backupandrecized recized recized recize

PHP Webインターフェイスを介してMySQLユーザーを追加すると、MySQLI拡張機能を使用できます。手順は次のとおりです。1。MySQLデータベースに接続し、MySQLI拡張機能を使用します。 2。ユーザーを作成し、CreateUserステートメントを使用し、パスワード()関数を使用してパスワードを暗号化します。 3. SQLインジェクションを防ぎ、MySQLI_REAL_ESCAPE_STRING()関数を使用してユーザー入力を処理します。 4.新しいユーザーに権限を割り当て、助成金ステートメントを使用します。

mysql'sblobissuitable forstoringbinarydatawithinarationaldatabase、whileenosqloptionslikemongodb、redis、andcassandraofferferulesions forunstructureddata.blobissimplerbutcanslowdowdowd withwithdata

toaddauserinmysql、使用:createuser'username '@' host'identifidedby'password '; here'showtodoitsely:1)chosehostcarefilytoconを選択しますTrolaccess.2)setResourcelimitslikemax_queries_per_hour.3)usestrong、uniquasswords.4)endforcessl/tlsconnectionswith

toavoidcommonMonmistakeswithStringDatatypesinmysql、undultingStringTypenuste、choosetherightType、andManageEncodingandCollationsEttingtingive.1)Usecharforfixed-LengthStrings、Varcharforaible Length、AndText/Blobforlardata.2)setCurrectCherts


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

WebStorm Mac版
便利なJavaScript開発ツール
