关于MySQL索引index杂谈

MySQL建索引命令

create index index_name on tablename(clomun_name.....);

比如建了

CREATE INDEX  O_N_P_D  ON   t_db_netspeed(o,n,p,d)

建好索引之后,使用SELECT 命令进行查询

SELECT COUNT(*) FROM  t_db_netspeed WHERE O=1

这句话也会用到前面建立的索引 O_N_P_D,

首先我们来理解一下索引,多值索引中存放了N个索引值,这N个索引值的排序是按照建立索引的顺利来的,如果前面建立的那个索引,就是先根据o值建立索引然后再是n,p,d,如果o/n/p值都一样,则按照d值来排序。

——“索引对多个值进行排序的一句是CRATE TABLE 语句中定义索引时列的顺序”

所以即便是指查询O值也会用到索引O_N_P_D,即索引值时根据4个列值来建立的,不是非得具备这4个列值

但是这里也有个前提 就是顺序,即索引不能跳过索引顺序,可以看到索引o值时在索引O_N_P_D的第一个索引列

如果查询语句为

SELECT COUNT(*) FROM t_db_netspeed WHERE N=1;

此时就不会用到索引O_N_P_D索引

——“WHERE 配合索引是不分顺序的”

如果查询语句为:

SELECT COUNT(*) FROM t_db_netspeed WHERE n=1 AND o=1 AND p=1 AND d=1;

此语句也会用到索引O_N_P_D;

—优先索引数量

如果在上面那个表t_db_netspeed 也建立了另外一个索引P

CREATE INDEX P ON t_db_netspeed(p)

如果查询语句为:

SELECT COUNT(*) FROM t_db_netspeed WHERE p=1 AND o=1;

会优先使用索引P_N_P_D ,虽然查询语句中没有用到4个索引值,但是用了其中2个,所以不会使用索引P


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值