我有一个非常大的MySQL表,其中包含大约150,000行数据。目前,当我尝试运行
SELECT * FROM table WHERE id = '1';
代码运行良好,因为ID字段是主索引。然而,对于该项目的最新发展,我必须按另一个字段搜索数据库。例如:
SELECT * FROM table WHERE product_id = '1';
这个字段以前没有索引;但是,我已经添加了一个,所以mysql现在对该字段进行索引,但是当我尝试运行上面的查询时,它的运行速度非常慢。EXPLAIN查询显示,当我已经为product_id字段添加了索引时,它却没有索引,因此查询需要花费20到30分钟的时间才能返回一行。
我的完整解释结果是:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
注意,我刚刚看了一下,ID字段存储为INT,而PRODUCT_ID字段存储为VARCHAR,这可能会有所帮助。这会是问题的根源吗?
发布于 2010-06-09 09:47:27
ALTER TABLE `table` ADD INDEX `product_id_index` (`product_id`)
切勿在MySQL中将integer
与strings
进行比较。如果id
为int
,则删除引号。
发布于 2013-05-03 23:52:08
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
发布于 2014-05-22 19:08:57
您可以使用此语法添加索引并控制索引的类型(HASH或BTREE)。
create index your_index_name on your_table_name(your_column_name) using HASH;
或
create index your_index_name on your_table_name(your_column_name) using BTREE;
您可以在此处了解BTREE和散列索引之间的差异:http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
https://stackoverflow.com/questions/3002605
复制相似问题