基本情報:これはOpenStreetMapデータのインデックス作成プロセスのコンテキストです。質問を簡略化するために、コア情報は、値「W」、「R」、「N」(VARCHAR(1)
)の3つの主なタイプに分けられます。膨大な量の同じ値のインデックス作成/パフォーマンス戦略
テーブルは〜75Mの行のどこかにあり、 "W"の列はすべて〜42Mの行を構成します。既存の索引はこの質問には関係ありません。
質問自体:データの索引付けは手順で行います。この手順の中では、次のようなループがあります。
[...] SELECT * FROM table WHERE the_key = "W"; [...]
結果が再びループし、上記のクエリ自体もループしています。これには多くの時間がかかり、プロセスが大幅に遅くなります。インデックスが使用する可能性があるすべての値が同じ(「W」)であるため、インデックス番号the_key
は明らかに役に立たない。スクリプト自体は速度がOKで実行されており、SELECT
には非常に時間がかかります。
ドI
- これを考慮して
SELECT
が迅速になり、インデックスの「特別」なものを作成する必要がありますか?もしそうなら、どちらですか? - は、サーバパラメータの一部を調整する必要があります(すでに調整されており、配信された結果が良好であるようですが、必要に応じて投稿できます)。
- はスピードと共存してより多くのパワーを得るためにハードウェアを増やす必要があります(Tim Taylor grunt grunt)?
上記の点の代替手段(書き換えないし使用しない点を除く)はありますか?
他にどのように最適化できますか?あなたが処理する膨大な量のデータが遅いことが考えられます。例えばSELECT * FROM table WHERE the_key = "W"をループ内で実行しないでください。 – nos