タグ

インデックスに関するsatoshieのブックマーク (5)

  • MySQLのインデックスの貼っていいとき悪いときを原理から理解したいよ😭

    今回答えを出したい問いはこちら!! インデックスはどのような仕組みを以て、何を実現したいものなのか それを踏まえたとき、インデックスはどういう場合になぜ貼る方が良いのか。また、どういう場合になぜ貼らない方が良いのか 大体分かっているよって人はサヨナラって感じのおさらい記事だぜ!!!!それじゃいってみよー🎉 あと、おれは今回MySQLにしぼっていくぜ👶 ってわけでOracleとかに興味があるやつは引き返しな! indexの概要 公式の見解としては「where句を使ったselectクエリの実行速度を向上させるために実装されている、各行へのポインターのような振る舞いをする仕組み」って感じ👶 The best way to improve the performance of SELECT operations is to create indexes on one or more of t

    MySQLのインデックスの貼っていいとき悪いときを原理から理解したいよ😭
  • 第32回 InnoDBインデックスの最大キー長について | gihyo.jp

    文字列型カラム(varchar型やchar型など)に対してインデックスを作成する場合に最大キー長があり、それはバイト数で管理されています。今回はいくつかのオプションやパラメータが、InnoDBのインデックスの最大キー長に対してどのように影響するかを紹介します。 InnoDBのファイルフォーマットによるインデックスの最大キー長の違い 基的には単一カラムインデックスの最大キー長は767バイトまで作成できます。特定の条件ではインデックスの最大キー長を3072バイトまで拡張することができます。その条件は以下のとおりです。 テーブル作成時に行フォーマットをDYNAMICまたはCOMPRESSEDに指定する。 innodb_file_per_tableパラメータをONに設定して、テーブルデータを個別のibdファイルに格納するようにする。 innodb_large_prefixパラメータを有効にする。

    第32回 InnoDBインデックスの最大キー長について | gihyo.jp
  • インデックスが効くクエリ・効かないクエリ

    MySQL を使っていて、datetime 型のカラムにインデックスを追加する検証をしていたが、いまいちパフォーマンスが向上しない。クエリをみてみると WHERE 句に DATE 関数を使っているものは、追加したインデックスが効いていなかった。よく考えてみると当然だが、datetime 型のインデックスを違う型で検索することはできない。例えば DATE 関数を使ったクエリが多いのであれば、関数を適用したあとの値でインデックスを作成することも原理的にはできそうだが、MySQL は対応していなかった。 ググると、RDBMS 一般でインデックスが効く演算子のことを Sargable、そうでないものを Non-Sargable と呼ぶことがあるそうだ。 Sargable - Wikipedia, the free encyclopedia あまり広く使われている用語には見えないが、内容は納得のいく

    インデックスが効くクエリ・効かないクエリ
  • DateTime型の列にインデックスを付けるのは邪道? - 約100件/日のペ... - Yahoo!知恵袋

    何を思って「邪道でかも」と思ったのか分かりませんが、必要であるなら邪道ではありません。 「そもそも論はご遠慮」とかかれていますが、そもそも、何かの必要性がある場合にインデックスをつけるので、必要性があるなら邪道ではないと思います。(例えば、検索の時のキーになるや、結合のカラムとなる(秒まで入るならこれは無さそうですが・・・)など) インデックスの必要性がないカラムにインデックスをつけるのは、データ型に限らず邪道です。 インデックスをつけることによる弊害はご存知ですか?(例えば、InsertやUpdateの速度が落ちるとか、B-Treeインデックスの場合は、インデックスの偏りが考えられるなら、メンテナンスが必要など) 一般論として、このあたりの利点と不利な点を比べ、必要であるかを考えるのが良いかと思います。 ちなみに、当社のシステムでは同じような秒まで保存する列にインデックスをつけて運用して

    DateTime型の列にインデックスを付けるのは邪道? - 約100件/日のペ... - Yahoo!知恵袋
    satoshie
    satoshie 2016/08/10
    回答者のインデックスに関しての説明がわかりやすい。
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 8.3.1 MySQL のインデックスの使用の仕組み

    インデックスは特定のカラム値のある行をすばやく見つけるために使用されます。 インデックスがないと、MySQL は関連する行を見つけるために、先頭行から始めてテーブル全体を読み取る必要があります。 テーブルが大きいほど、このコストが大きくなります。 テーブルに問題のカラムのインデックスが含まれている場合、MySQL はすべてのデータを調べる必要なく、データファイルの途中のシークする位置をすばやく特定できます。 これはすべての行を順次読み取るよりはるかに高速です。 ほとんどの MySQL インデックス (PRIMARY KEY、UNIQUE、INDEX、および FULLTEXT) は B ツリーに格納されます。 例外: 空間データ型のインデックスは R ツリーを使用します。MEMORY テーブルはハッシュインデックスもサポートします。InnoDB は FULLTEXT インデックスの逆のリスト

  • 1