我如何为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进行比较 如果idint ,请删除引号。


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

上一篇: How do I add indices to MySQL tables?

下一篇: MySQL: Large VARCHAR vs. TEXT?