重複の可能性:
Mysql クエリで整数を引用することの欠点?
MYSql データベースに Device という非常に単純なテーブルがあります。
+-----------------------------------+--------------+------+-----+----------------+
| Field | Type | Null | Key | Extra |
+-----------------------------------+--------------+------+-----+----------------+
| DTYPE | varchar(31) | NO | | |
| id | bigint(20) | NO | PRI | auto_increment |
| dateCreated | datetime | NO | | |
| dateModified | datetime | NO | | |
| phoneNumber | varchar(255) | YES | MUL | |
| version | bigint(20) | NO | | |
| oldPhoneNumber | varchar(255) | YES | | |
+-----------------------------------+--------------+------+-----+----------------+
このテーブルには 100K を超えるレコードがあります。非常に単純なクエリを実行しています
select * from AttDevice where phoneNumber = 5107357058;
このクエリはほぼ 4 ~ 6 秒かかりますが、このクエリを以下のように少し変更すると、
select * from AttDevice where phoneNumber = '5107357058';
処刑されるのにほとんど時間はかかりません。phoneNumber 列が varchar であることに注意してください。前者の場合は時間がかかり、後者の場合は時間がかからない理由がわかりません。これら 2 つのクエリの違いは、一重引用符です。MYSQL はこれらを別の方法でクエリに処理しますか? もしそうなら、なぜですか?
編集1
次の出力を使用EXPLAIN
して取得しましたが、これら2つの結果を解釈する方法がわかりません。
mysql> EXPLAIN select * from AttDevice where phoneNumber = 5107357058;
+----+-------------+-----------+------+---------------------------------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------------------------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | Device | ALL | phoneNumber,idx_Device_phoneNumber | NULL | NULL | NULL | 6482116 | Using where |
+----+-------------+-----------+------+---------------------------------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN select * from AttDevice where phoneNumber = '5107357058';
+----+-------------+-----------+------+---------------------------------------+-------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------------------------------+-------------+---------+-------+------+-------------+
| 1 | SIMPLE | Device | ref | phoneNumber,idx_Device_phoneNumber | phoneNumber | 258 | const | 2 | Using where |
+----+-------------+-----------+------+---------------------------------------+-------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
EXPLAIN クエリ出力に存在するキー、key_len、および行について説明してもらえますか?