テーブルはInnoDBテーブルにあります。ここに役立つかもしれないいくつかの情報があります。
EXPLAIN SELECT COUNT(*) AS y0_ FROM db.table this_ WHERE this_.id IS NOT NULL;
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
| 1 | SIMPLE | this_ | index | PRIMARY | PRIMARY | 8 | NULL | 4711235 | Using where; Using index |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
1 row in set (0.00 sec)
mysql> DESCRIBE db.table;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | NULL | |
| id2 | varchar(28) | YES | | NULL | |
| photo | longblob | YES | | NULL | |
| source | varchar(10) | YES | | NULL | |
| file_name | varchar(120) | YES | | NULL | |
| file_type | char(1) | YES | | NULL | |
| created_date | datetime | YES | | NULL | |
| updated_date | datetime | YES | | NULL | |
| createdby | varchar(50) | YES | | NULL | |
| updatedby | varchar(50) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
10 rows in set (0.05 sec)
Explainクエリは、その場で結果を表示します。しかし、実際のクエリはかなり長い間実行されています。どうすればこれを修正できますか?私は何が間違っているのですか?
photos
基本的に、このテーブルにいくつあるかを把握する必要があります。当初、元のコーダーにはチェックするクエリがありましたがWHERE photo IS NOT NULL
(3時間以上かかりました)、このクエリを変更して、id
列が主キーであるためチェックしました。私はそこで大幅なパフォーマンスの向上を期待し、1秒以内に答えを期待していましたが、そうではないようです。
データベースでどのような種類の最適化を行う必要がありますか?クエリは問題ないと思いますが、間違っている場合は遠慮なく訂正してください。
編集:mysql Ver 14.14 Distrib 5.1.52、readline 5.1を使用したredhat-linux-gnu(x86_64)用
PS:クレイジーな理由で、テーブルの名前を変更しました。私は実際にはdbという名前のデータベースとtableという名前の問題のテーブルを持っていません。