mysql> EXPLAIN SELECT col1, col2 FROM t WHERE col1 REGEXP '^foobar_[0-9]{4}$';
+----+-------------+---------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | t | ALL | NULL | NULL | NULL | NULL | 757000 | Using where |
+----+-------------+---------------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.15 sec)
mysql> DESCRIBE t;
+------------------------+------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------------+------+-----+---------+-------+
| col2 | varchar(255) | NO | MUL | {} | |
| col1 | varbinary(255) | NO | PRI | | |
+------------------------+------------------------+------+-----+---------+-------+
2 rows in set (0.22 sec)
質問する
81 次
2 に答える
2
col1 にインデックスがあり、次のLIKE
ように追加する場合:
SELECT col1, col2
FROM t
WHERE col1 LIKE 'foobar_%' AND col1 REGEXP '^foobar_[0-9]{4}$';
あなたはもう少しスピードを上げるべきです。
(col1、col2)のインデックスを作成して、mysqlにそのテーブルのコピーをメモリに保存させることもできます
于 2012-07-05T05:39:44.803 に答える
0
常に同じである場合は、RegExを事前に計算した3番目の行を作成することで、このクエリを高速化できます。
MySQLは関数ベースのインデックスをサポートしていないようです。
于 2012-07-05T05:36:29.913 に答える