MySQL 的查询条件要用到的字段是否需要建立索引?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

a123456678 2016-06-29 12:51:48 2043

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是作为查询条件的,但是如果它的值大部分都是重复的,那么实际上索引起不到什么作用,反而还耽误载入索引的时间,不知道我的想法是否正确?

关系型数据库 MySQL 索引
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:48:58

    是的,如果你的STATUS字段值是个状态值的话,是走全表扫描的,索引的建立是在distinct column很大的基础上,不知道status字段类型是否是enum,这样的话更好了

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程