我如何为MySQL表添加索引?
我有一个有大约150,000行数据的非常大的MySQL表。 目前,当我尝试和运行
SELECT * FROM table WHERE id = '1';
代码运行良好,因为ID字段是主索引。 但是,最近为了项目的发展,我必须在另一个领域搜索数据库。 例如
SELECT * FROM table WHERE product_id = '1';
此字段以前没有编入索引,但是,我已将其添加为索引,但是当我尝试运行上述查询时,结果非常缓慢。 一个EXPLAIN查询显示,当我已经添加一个product_id字段时,没有索引,并且查询从20分钟到30分钟之间的任何地方返回一行。
我的完整EXPLAIN结果是:
| 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可能会有帮助。 这可能是问题的根源吗?
ALTER TABLE `table` ADD INDEX `product_id` (`product_id`)
切勿将integer
与MySQL中的strings
进行比较 如果id
是int
,请删除引号。
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
您可以使用此语法来添加索引并控制索引的种类(HASH或BTREE)
create index your_index_name on your_table_name(your_column_name) using HASH;
or
create index your_index_name on your_table_name(your_column_name) using BTREE;
您可以在这里了解BTREE和HASH索引之间的差异:http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
链接地址: http://www.djcxy.com/p/58957.html