关于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
———将table中数据删除后 索引index仍旧存在,重新插入数据后,索引貌似仍有效!!
版权声明:本文为博主原创文章,未经博主允许不得转载。