『sqlパフォーマンス詳解』の翻訳者の松浦隼人さんに、8つの「sqlが重たくなる原因とその対策」を聞きました。システムのボトルネックになるような「問題のあるsql」を回避するノウハウを学びましょう。

MySQLのlimitを使用した場合、オフセット部分が増えるとパフォーマンスが低下する場合の対処方法メモ。データベースからlimit指定で必要な情報を抜き出すのは便利ですが、インデックスが使われていなかったりして激重になるケースもよく見かけ 牧野です。 以前、PostgreSQLで重いSQLをどうやって見つけるか紹介しましたが、今回はPostgreSQLの処理を速くするためのSQLの具体例をいくつか紹介します。

インデックスの張ってある項目の最大値・最小値の両方を取得したい場合、一回のSQLで両方取得するより、別々に取得した方が速い。 SQL> select min(KEY) from TEST; MIN(KEY) ----- 0 経過: 00:00:00.00 実行計画 ----- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5) 1 0 SORT (AGGREGATE) 2 1 INDEX (FULL SCAN (MIN/MAX… 遅いSQLを特定できたので、今度はその実行プランがどうなっているかを確認します。今回はSQL Server Profilerから直接プランを確認できました(図2 group byが遅いときのチューニング方法. >>【oracle】sqlの実行計画を取得する方法. SQL 上記テーブルに対して集約関数を使用してデータを抽出します。 SELECT SUM(price),AVG(price),MAX(price),MIN(price),COUNT(price) FROM `syouhin`; 1行目は、それぞれ集約関数を使用しています。 結果 結果は、以下のとおり インデックスを使わないSQLはパフォーマンスが遅いOracleでパフォーマンスが遅いのにはいくつかの理由があります。パフォーマンスが遅い理由で最も多いのが「SQLの問題」です。SQLを改善すれば、パフォーマンスがよくなって検索時間を短縮でき 以下の疑似コードに示されたsqlを発行する。 疑似コード SELECT ( 取得したい列 ) FROM テーブル A INNER JOIN ( SELECT グループ列 , MAX ( 最大値を求める列 ) AS 最大値 FROM テーブル A GROUP BY グループ列 ) AS テーブル B ON テーブル A . groupbyが遅いsqlでよくあるのが、集約する項目が無駄に多い場合です。 例えば、売上データを顧客ごと、担当者ごと、部署ごとに集約して集計する場合です。 SQLServerのselect文でデータ数1万くらいのDBからtop n とorder by つきで取得したときに、10秒以上かかってしまいます。top n だけやorder byだけであれば、そんなにかかりませんが、同時に扱う場合、なぜこんなに時間がかかってし
SQLを書いていて、あるグループごとにある項目を集計して最大値を持つ行だけを検索したいときがある。 これまではあまり気にせずにgroup byと集計関数MAXを使ったサブクエリを検索条件に使うことで求めていたが、 パフォーマンスがよくないことがあり、今回改めて検証してみた。

皆さん、明けましておめでとうございます。今年も連載を続けられるように頑張りますので、よろしくお願いします。 今年最初の内容は、「パフォーマンスの良いSQL文について」の続きとして今までに説明できていなかったことをいくつか説明しようと思いますので、参考にして下さい。

皆さんこんにちは、関東でも桜が開花してやっと春らしい気候になってきましたね。たまには花見などの気分転換も良いものですよ。この原稿が公開される頃にはもう桜は散っているかもしれませんね。 最近、リソース(メモリなど)の不足により、SQLの実行が終わらないのを目にしました。