关于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仍旧存在,重新插入数据后,索引貌似仍有效!!



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-01-04 11:27  mooreliu  阅读(94)  评论(0编辑  收藏  举报