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

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

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

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

Q&A

解決済

2回答

349閲覧

インデックス・select文の挙動がおかしい

whxtna

総合スコア57

MySQL

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

0グッド

0クリップ

投稿2017/12/11 03:31

ユーザーのブログを管理する以下のようなテーブルに関して、

CREATE TABLE `user_blog_tbl` ( `user_blog_id` BIGINT(20) NOT NULL, `user_id` INT(11) NOT NULL, `category_id` INT(11) NOT NULL, `title` VARCHAR(255) NOT NULL DEFAULT '', `memo` MEDIUMTEXT NOT NULL, `delete_flag` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0', `created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `deleted_timestamp` INT(11) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`user_blog_id`), INDEX `idx_user_blog_tbl_mul01` (`user_id`, `delete_flag`, `updated_at`), INDEX `idx_user_blog_tbl_mul02` (`user_id`, `category_id`, `delete_flag`, `updated_at`), FULLTEXT INDEX `blog_title` (`title`), FULLTEXT INDEX `blog_memo` (`memo`), FULLTEXT INDEX `blog_title_2` (`title`, `memo`) ) COMMENT='ユーザブログテーブル' COLLATE='utf8_general_ci' ENGINE=Mroonga ;

select文にて
select * from user_blog_tbl where user_id = A;
として、ユーザーAに関してのデタを抽出したところ、データは確かに存在するのですが、上記select文にて結果が返ってきません。
また、
select * from user_blog_tbl where user_id = A and delete_flag = 1;
とした場合、結果が正常に返ってきます。
また、
ユーザーA以外のユーザーB他ユーザーCなどでは下記select文にて正常にデータが返ってきます。
select * from user_blog_tbl where user_id = B;
特定のユーザーだけ発生しているようです。

こちら、なにが原因と考えられますでしょうか?

ご教授よろしくお願いいたします。

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

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

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

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

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

yambejp

2017/12/11 03:43

int型のカラムに対して例示が「A」なので、検証のしようがないかと
whxtna

2017/12/11 04:01

わかりずらく、申し訳ありません。Aはあてでいれたものになります。
yambejp

2017/12/11 04:07

とりあえずEngineを一般的なMyISAMやInnoDBに変えて試されましたか?その上でヒットしないようなサンプルデータをつけて再度きちんと例示されることをお勧めします
masaya_ohashi

2017/12/11 04:07

delete_flagというカラムの存在、そしてdelete_flag=1なら返ってくるという状況を見るに、なんらかのフレームワーク経由でDBへアクセスしていませんか?MySQL Workbench等で該当のクエリを実行した場合、正しくAの結果が返ってきませんか?
hatena19

2017/12/11 04:11

症状が再現できるデータ例を、INSERT INTO で提示してもらえませんか。
whxtna

2017/12/12 02:24 編集

↑削除依頼中です。すいません。フレームワーク経由で該当クエリを実行した場合でもDBのGUIツールを利用し直接実行した場合のどちらでも正しい結果が返ってきませんでした。
masaya_ohashi

2017/12/12 02:21

user_idがBのデータはdelete_flagは1ですか?0ですか?
whxtna

2017/12/12 02:30

user_idがBのデータは複数ありdelete_flagは1と0両方です。user_idがAのデータも複数ありdelete_flagはすべて1です。
masaya_ohashi

2017/12/12 02:32

WHERE user_id=Aで探したときは1件もひっかからず、user_id=Bで検索したとき、delete_flagが0のデータも1のデータも含め全件出ますか?
whxtna

2017/12/12 02:34

はい。その認識であっております。
whxtna

2017/12/12 02:41 編集

WHERE user_id=Aで探したときは1件もひっかからず、user_id=Bで検索したとき、delete_flagが0のデータも1のデータも含め全件でます。
masaya_ohashi

2017/12/12 02:45

うーん…?そんなことが起こり得るのでしょうか。正直いまのところ考えられるのは「勘違い」しかありません。可能であればuser_idがAのレコードのサンプル、Bのレコードのサンプルを追記できますか?
yambejp

2017/12/12 02:50 編集

早い段階から指摘してありますが、まずint型の検索なのでuser_id=1とか2とかそういうサンプルの書き方にしてください。その「1」や「2」というキーワード自体に意味があるかもしれないので。とにかく再現性のあるテーブルのデータを提示してもらわない限り回答は「質問者さんの勘違い」に終止すると思いますよ
whxtna

2017/12/12 05:03

サンプルの書き方が不十分であり申し訳ございません。以後気を付けます。全く同じデータにて別環境(開発環境)にて実施したところ問題なく正常にデータが返ってきました。現象が再現されているのが本番環境となります。
yambejp

2017/12/12 05:13

「別環境(開発環境)にて実施したところ問題なく正常にデータが返ってきました」となるとテーブルが壊れているのかもしれませんね。一度dumpでバックアップしてテーブルを作り直してから再投入するのが現実的ではないでしょうか?
x_x

2017/12/12 05:15

データ量が多い、負荷がかかっているなどで処理が重くて返ってきていないということはありませんか?
whxtna

2017/12/12 05:29

>x_xさん ありがとうございます。ユーザーAの5倍近くのデータ量のユーザーに関して実行してみたところ正常にデータが返ってきました。なので、データ量の関係性はないかと思われます。
whxtna

2017/12/12 05:33

>yambejpさん ご意見ありがとうございます。テーブルの作り直しを検討していこうと思います。ちなみになんですが、テーブルが壊れる原因としてはなにが考えられるのでしょうか?また、他は正常通りで特定のユーザーのデータのみ挙動がおかしくなるようなこともテーブルが壊れることで発生してしまうものなのでしょうか?知識不足で申し訳ありません。
yambejp

2017/12/12 05:53

とくに今回はMroongaエンジンを利用ということで未知のバグなど包含しているのかもしれません
whxtna

2017/12/12 06:27

>yambejpさん 詳しいご説明ありがとうございます。参考URLまでいただき、後程確認させていただきます。Mroongaエンジンの道のバグに関しても調査しつつ進行していきたいと思います。
guest

回答2

0

自己解決

具体的に解決にはいたっていないが、Mroongaエンジンの未知のバグまたは、テーブルの破損を視野に再度調査を進める。

投稿2017/12/14 05:04

whxtna

総合スコア57

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

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

0

もしかしてなんですが、これならどうでしょう。

SQL

1SELECT SQL_NO_CACHE * FROM user_blog_tbl WHERE user_id = A;

投稿2017/12/12 02:49

masaya_ohashi

総合スコア9206

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

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

whxtna

2017/12/12 04:56

ありがとうございます。 実行してみましたが、データが返ってくることはなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問