Mysql索引介绍与使用

Mysql新建索引:
         CREATE INDEX indexName ON mytable(username(length));
修改表结构建立索引:
         ALTER mytable ADD INDEX [indexName] ON (username(length));

索引两个特征:唯一索引和复合(组合)索引
唯一索引:
        1): 只要条件列中出现索引列,无论在什么位置,都能利用索引查询。
复合索引(联合索引):create index person_name on person (last_name, first_name)
        1):查询条件中出现 联合索引第一列,或者全部,则能利用联合索引. 若没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,都不会利用联合索引查询.
        2): 条件列中只要条件相连在一起,以本文例子来说就是:last_name=’1′ and first_name=’1′与first_name=’1′ and last_name=’1′,无论前后,都会利用上联合索引.
两者的共同点:
       1):要想利用索引,都要符合SARG标准.
       2):都是为了提高查询速度.
       3):都需要额外的系统开销,磁盘空间.

补充说明: stmtText信息来产生,在查询语句前面加上:SET STATISTICS PROFILE on.可以通过运行它,来观察你的查询是否合理,这样才能真正做到优化.


在聚集索引中,数据记录的组织是按照索引中的键值连续存储的,即具有相同键值的记录存储在一起,而非聚集索引则记录的存储是随意的.
比如有模式R(A,B),数据记录有{(1,1), (2,2),(3,2), (4,1),(5,3),(6,2), (7,1)},如果在B属性上创建聚集索引,则记录按照如下方式组织:
(1,1), (4,1), (7,1),(2,2),(3,2), (6,2), (5,3), 
索引结构为<索引项,指针>,则索引内容为<1,0>,<2,3>,<3,6>
这样查询B=2是就可以连续地将记录(2,2),(3,2), (6,2)取得
而如果是非聚集索引则不是按照索引属性排列元组,假设按上面的的顺序排列
索引内容为<1,{0,3,6}>,<2,{1,2,5}>,<3,{4}>
查询是需要根据指针地址逐一取出记录 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值