数式


スマートかつインデックスが正しく使われにくい、処理しにくい表現は もう1つあります。論理式を使う代わりに、数式を使うことです。

以下の文を考えてみましょう。NUMERIC_NUMBER列の インデックスは使えるでしょうか?

SELECT numeric_number
  FROM table_name
 WHERE numeric_number - 1000 > ?

同様に以下の文で、選んだ順にABに 対するインデックスは使われるでしょうか?

SELECT a, b
  FROM table_name
 WHERE 3*a + 5 = b

違う角度からこの問題を考えてみましょう。あなたがSQLデータベースの 開発者だとしたら、等式のソルバを実装するでしょうか?多くの データベースベンダは「No!」と言っています。そのため、2つの例の どちらも、インデックスは使われません。

初心者からエキスパートまで役に立つ内容です。
特に駆け出しのエンジニアは持っておくといい

数式を使うことで、全文検索の LIKEで同じことをしたように、条件を意図的に 抽象化することができます。例えば、ゼロを加算するだけでも 十分です。

SELECT numeric_number
  FROM table_name
 WHERE numeric_number + 0 = ?

うまく計算式を作り、方程式のような where句に変換すれば、関数インデックスを使うことも できます。

SELECT a, b
  FROM table_name
 WHERE 3*a - b = -5

テーブルへの参照を左辺に寄せて、定数を右辺に集めています。 それから、左辺に対するインデックスを作ればよいのです。

CREATE INDEX math ON table_name (3*a - b)
Photo of Markus Winand
Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。 彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。