質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

2回答

2477閲覧

phpMyAdminの一意な値の数が合わない?

mayoi_maimai

総合スコア1583

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

0グッド

0クリップ

投稿2017/07/04 08:49

編集2017/07/05 00:58

いつもお世話になります。
mysqlでとあるテーブルを作成し、以下キャプチャのようなインデックスを作成しました。

全レコード数が5件で、レコードの中身は以下のテーブル部分になります。

【PRODUCT_ID】カラムは10000、10001、10002なので、一意の値の数は【3】だと思うのですが実際は【5】になっているのですが、これは私の認識がそもそも間違っているのでしょうか?

###キャプチャ
イメージ説明

###レコード

PART_NOPRODUCT_IDATTRIBUTE_IDSUPPLIER_IDSALES_PRICE
100001000010012100022980
100011000010013100023980
1000410000NULL10000100
1000510001NULL100002970
1000610002NULL100001680

###補足情報
MySQL:5.6.36
phpMyAdmin:4.7.0

###追記
ご指摘いただきましたSQLと実行結果を追記させていただきました。
select
count(DISTINCT PART_NO) ,
count(DISTINCT PRODUCT_ID ) ,
count(DISTINCT ATTRIBUTE_ID) ,
count(DISTINCT SUPPLIER_ID) ,
count(DISTINCT SALES_PRICE)
from PRODUCT_ATTRIBUTE

count(DISTINCT PART_NO)count(DISTINCT PRODUCT_ID)count(DISTINCT ATTRIBUTE_ID)count(DISTINCT SUPPLIER_ID)count(DISTINCT SALES_PRICE)
53225

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

きちんとやるならSQL文を発行して下さい

SQL

1select 2count(DISTINCT PART_NO) 3,count(DISTINCT PRODUCT_ID ) 4,count(DISTINCT ATTRIBUTE_ID) 5,count(DISTINCT SUPPLIER_ID) 6,count(DISTINCT SALES_PRICE) 7from tbl 8

投稿2017/07/04 09:08

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mayoi_maimai

2017/07/05 01:00

ご回答ありがとうございました。 ご指摘いただきました部分を追記させていただきましたm(__)m
yambejp

2017/07/05 01:40

ちなみに上記で問題ないですよね? 場合によってはNULLを1つのデータとしてカウントしたいという無茶を言うこともあるので・・・
mayoi_maimai

2017/07/06 01:00

ご回答ありがとうございました。 はい、テーブル名を正規のものに変えてご教授いただきましたSQLをそのまま流した結果になりますm(__)m
guest

0

ベストアンサー

MySQLの一意の値の数(カーディナリティ)の値は**「計測した値」ではなく「推測した値」**です。
ので、データが少ない場合は実際とは一致しないことがあります。

追記
上でデータが少ない場合と書いたのですが、**「推測した値」**なのでデータが多くとも(特に偏っている場合)は実際の値と異なっている場合があります。

投稿2017/07/04 09:05

編集2017/07/04 09:24
shoko1

総合スコア372

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mayoi_maimai

2017/07/05 01:10

「計測した値」ではなく「推測した値」といのは知りませんでした。。 ご回答ありがとうございました!
shoko1

2017/07/05 01:40

「推測した値」というの意外に重要で、追記で書いたように偏った値の場合(よくあるのはフラグのような0or1の場合)に一意の値の数が大きく推測され有効なインデックスを利用しないことがあります。「推測した値」なので前述の現状が起きる可能性があることを知っていれば、最初からインデックスヒントを利用するといった対応が可能です。
mayoi_maimai

2017/07/06 01:01

ご回答ありがとうございます。 大変勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問