Help us understand the problem. What is going on with this article?

カーディナリティについてまとめてみた

More than 5 years have passed since last update.

カーディナリティとは

テーブルにカラムがあるとして、カラムに格納されているデータの種類がどのくらいあるのか(カラムの値の種類の絶対値)を、カーディナリティという。

具体例

カーディナリティが低い場合

例えば性別なら、男と女の二種類である。
カラムのデータの種類が、テーブルのレコード数に比べて二種類と少ない。このことを カーディナリティが低い という。

カーディナリティが高い場合

一方顧客番号ならたくさんの種類(番号)が存在することになる。
カラムのデータの種類が、テーブルのレコード数に比べて多い場合、 カーディナリティが高い という。

カーディナリティを踏まえたインデックスの張り方

基本的に、 カーディナリティの高い列に作成する 必要がある。

はじめに、カーディナリティは カラムの値の種類の絶対値と書いたが、先程の例で言うと性別のカーディナリティは2になる。他にも例えば1年間の日付なら1〜365なのでカーディナリティは365になる。カーディナリティが高いのは日付ということになる。

インデックスを作る時の目安は特定のカラム値を指定した時に、全体の 5%程度に絞り込めるだけのカーディナリティがあることである。例えば先ほどの日付の例だと、365日のうちの1日を指定するselect文を考えるとする。
この場合 1 / 365 ≒ 0.27%となるので、インデックスを作成する意味はあるといえるだろう。
反対に、性別の場合男女どちらを選んでも 1 / 2 = 50%となるので、インデックスを作成する意味はないし、むしろマイナスになるだろう。

複合インデックスを貼る時は、 カーディナリティの高い順に貼っていくのが大事で、適当な順番にしてはいけない。これは直感的にも顧客番号のほうが明らかに検索する回数が多そうだから先に絞ってしまおうという考えになるだろう。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした