MySQL改ページクエリの最適化技術
改ページクエリがあるアプリケーションでは、LIMITとOFFSETを含むクエリーがよく見られます。そして、ほぼすべてのORDER BYサブフレーズがあります。インデックスを使って並べ替えると、性能の最適化に非常に役立ちます。そうでないと、サーバーは多くのファイルを並べ替える必要があります。
一つの高周波の問題はoffsetの値が大きすぎます。LIMIT 10000、20のような照会をすると、10020行が発生し、前の10000行を廃棄します。このような価格はとても高いです。すべてのページが同じ頻度でアクセスすると仮定すると、このようなクエリは平均的に半分のデータテーブルをスキャンします。彼らを最適化するためには、改ページビューで最大アクセス可能なページ数を制限したり、より安価なクエリーを有効にしたりすることができます。
性能を改善するための簡単なテクニックは、行全体のデータではなく、カバーインデックス上で照会操作を行うことです。結果を完全な行に結合してから必要な列を得ることができます。このような効率は、以下のクエリのように、より高くなります。
リミットを固定位置のクエリに変換することもできます。このようにインデックスを範囲スキャンします。例えば、固定位置の列をあらかじめ計算しておくと、positionと呼ばれ、クエリーは以下のように書き換えられます。
LIMITとOFFSETの真の問題はOFFSETであり、これは多くのデータ行をサービス側が廃棄することを意味する。次に取得した行の位置を記録するために規則的なブックマークを使用すれば、前回の位置から次のデータにアクセスすることができます。例えば、レンタル記録を改ページする必要がある場合、最新のレンタル記録から検索に戻ると、記録の主キーに依存することができます。したがって、最初のページのデータについては、このように問い合わせることができます。
他のいくつかの技法は、事前に計算された統計値を用いて、または、メインキーとシリアルを組み合わせたデータテーブルを通して照会することを含み、これらの2つの方法は、空間的に時間を交換することによって照会効率を向上させる。
以上がMySQLの改ページクエリの最適化技術の詳細です。MySQLの改ページクエリに関する最適化された資料は他の関連記事に注目してください。
一つの高周波の問題はoffsetの値が大きすぎます。LIMIT 10000、20のような照会をすると、10020行が発生し、前の10000行を廃棄します。このような価格はとても高いです。すべてのページが同じ頻度でアクセスすると仮定すると、このようなクエリは平均的に半分のデータテーブルをスキャンします。彼らを最適化するためには、改ページビューで最大アクセス可能なページ数を制限したり、より安価なクエリーを有効にしたりすることができます。
性能を改善するための簡単なテクニックは、行全体のデータではなく、カバーインデックス上で照会操作を行うことです。結果を完全な行に結合してから必要な列を得ることができます。このような効率は、以下のクエリのように、より高くなります。
SELECT film_id, description FROM sakila.film ORDER BY title LIMIT 50, 5;
データテーブルが大きいなら、次のように最適化できます。
SELECT film.film_id, film.description
FROM sakila.film
INNER JOIN (
SELECT film_id FROM sakila.film
ORDER BY title LIMIT 50, 5)
) as lim USING(film_id);
この「推論共同クエリ」が、インデックスを使用して、サービスを最小限にして、データ行にアクセスして、データをチェックすることができるからです。再確認要求の行が確認されたら、彼らと対応するデータテーブルの行を共同で調べて、対応する行の他の列を取得します。リミットを固定位置のクエリに変換することもできます。このようにインデックスを範囲スキャンします。例えば、固定位置の列をあらかじめ計算しておくと、positionと呼ばれ、クエリーは以下のように書き換えられます。
SELECT film_id, description FROM sakila.film
WHERE position BETWEEN 50 AND 54 ORDER BY position;
並べ替えられたデータは同様の方法で解決することもできるが、通常はGROUT BY動作に影響される。ほとんどの場合は、ソート値を事前に計算して記憶する必要があります。LIMITとOFFSETの真の問題はOFFSETであり、これは多くのデータ行をサービス側が廃棄することを意味する。次に取得した行の位置を記録するために規則的なブックマークを使用すれば、前回の位置から次のデータにアクセスすることができます。例えば、レンタル記録を改ページする必要がある場合、最新のレンタル記録から検索に戻ると、記録の主キーに依存することができます。したがって、最初のページのデータについては、このように問い合わせることができます。
SELECT * FROM sakila.rental
ORDER BY rental_id DESC LIMIT 20;
このクエリは16049から16030までのデータを返します。次のクエリーは前の終了位置から開始できます。
SELECT * FROM sakila.rental
WHERE rental_id < 16030
ORDER BY rental_id DESC LIMIT 20;
このテクニックはどれぐらいのオフセットから調べても効果的です。他のいくつかの技法は、事前に計算された統計値を用いて、または、メインキーとシリアルを組み合わせたデータテーブルを通して照会することを含み、これらの2つの方法は、空間的に時間を交換することによって照会効率を向上させる。
以上がMySQLの改ページクエリの最適化技術の詳細です。MySQLの改ページクエリに関する最適化された資料は他の関連記事に注目してください。