您好,匿名用户
随意问技术百科期待您的加入

Mysql的查询条件要用到的字段是否需要建立索引?

0 投票

Mysql的排序字段要建立索引,我想这连初学者都知道。但是我想知道的是在下面这两种情况下对索引建立是否有一定的标准。假如我建立一个这样的post

mysql> DESC post;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id | int(11)          | YES  |     | 0       |                |
| status  | tinyint(4)       | YES  |     | 0       |                |
| text    | text             | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

如果我要按user_id来查询

mysql> SELECT * FROM post WHERE user_id = 123;
+----+---------+--------+-----------------+
| id | user_id | status | text            |
+----+---------+--------+-----------------+
|  1 |     123 |      1 | asdfasdfasdfsdf |
|  3 |     123 |      1 | dddddd          |
+----+---------+--------+-----------------+
2 rows in set (0.00 sec)

或者我要按status来查询

mysql> SELECT * FROM post WHERE status = 0;
+----+---------+--------+------------------+
| id | user_id | status | text             |
+----+---------+--------+------------------+
|  2 |     243 |      0 | 23423zxcv2323234 |
|  4 |     567 |      0 | xcvq3453q4534    |
+----+---------+--------+------------------+
2 rows in set (0.00 sec)

这两种查询在语句上看来没有任何区别,但是业务需求上是有很大区别的,user_id是一个外键字段,它的值是很分散的。而status是一个状态字段,它就集中在几个数字上,可能大部分还是某一个数字。对这两种查询如果做索引需要怎么考虑呢?我想的是虽然status是作为查询条件的,但是如果它的值大部分都是重复的,那么实际上索引起不到什么作用,反而还耽误载入索引的时间,不知道我的想法是否正确?

用户头像 提问 2012年 12月1日 @ Dionysus 上等兵 (229 威望)
分享到:

1个回答

0 投票

user_id需要建立索引
status因重复值太多,即使建立索引,数据库系统仍然会采用全表扫描的方式读取数据

用户头像 回复 2012年 12月1日 @ Sivir 上等兵 (275 威望)
提一个问题:

相关问题

0 投票
0 回复 7 阅读
用户头像 提问 2014年 3月19日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 46 阅读
用户头像 提问 2012年 12月1日 @ Trundle 上等兵 (301 威望)
0 投票
1 回复 31 阅读
用户头像 提问 2013年 12月5日 @ Miss Fortune 上等兵 (418 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Leona 上等兵 (279 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...