首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何向MySQL表添加索引?

如何向MySQL表添加索引?
EN

Stack Overflow用户
提问于 2010-06-09 09:41:24
回答 6查看 642.7K关注 0票数 461

我有一个非常大的MySQL表,其中包含大约150,000行数据。目前,当我尝试运行

代码语言:javascript
复制
SELECT * FROM table WHERE id = '1';

代码运行良好,因为ID字段是主索引。然而,对于该项目的最新发展,我必须按另一个字段搜索数据库。例如:

代码语言:javascript
复制
SELECT * FROM table WHERE product_id = '1';

这个字段以前没有索引;但是,我已经添加了一个,所以mysql现在对该字段进行索引,但是当我尝试运行上面的查询时,它的运行速度非常慢。EXPLAIN查询显示,当我已经为product_id字段添加了索引时,它却没有索引,因此查询需要花费20到30分钟的时间才能返回一行。

我的完整解释结果是:

代码语言:javascript
复制
| 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,这可能会有所帮助。这会是问题的根源吗?

EN

回答 6

Stack Overflow用户

发布于 2010-06-09 09:47:27

代码语言:javascript
复制
ALTER TABLE `table` ADD INDEX `product_id_index` (`product_id`)

切勿在MySQL中将integerstrings进行比较。如果idint,则删除引号。

票数 694
EN

Stack Overflow用户

发布于 2013-05-03 23:52:08

代码语言:javascript
复制
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
票数 167
EN

Stack Overflow用户

发布于 2014-05-22 19:08:57

您可以使用此语法添加索引并控制索引的类型(HASH或BTREE)。

代码语言:javascript
复制
create index your_index_name on your_table_name(your_column_name) using HASH;

代码语言:javascript
复制
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

票数 92
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3002605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档