MySQL的索引
来源:互联网 发布:c语言在线编译 输入 编辑:程序博客网 时间:2024/06/15 22:28
- 每一个索引就对应着一棵树
(1) 主键:MySQL会以主键的值构造一棵树,其叶子节点存放着该主键对应的整行数据。因此一张表在数据结构上就等价于一颗以主键排序好的树
(2)辅助索引:自己建的索引一般都叫辅助索引,辅助索引树的叶子节点存放着两样东西,即辅助索引字段的值以及它所对应的主键值。因此当走辅助索引时,先从辅助索引树找到所需的主键,再到主键树上取出整行数据中的所需字段。举个例子,设ID为主键,updatetime为辅助索引,name无索引,体味下下面两条查询的不同:
select ID from table where updatetime = today
select name from table where updatetime = today
前者直接在辅助索引树的叶子节点取出ID就返回了,后者还要再去主键树根据ID取name
(3)联合索引:如KEY(updatetime, name),则辅助索引树的叶子节点存放着(updatetime,name,ID)并先按updatetime排序好,updatetime相同再按name排序。所以此时查询:select xx from table where name = xx是没法走这个联合索引的,但若是:select xx from table where updatetime = today order by name就很屌了,因为当根据updatetime = today取出来的rows已经按name排序好了
- 一次查询同一张表的话,只能用一条索引
(1)MySQL会很只能的去分析走哪条索引扫描量少,然后选择一条最优的索引进行select。因此若是表建了一些奇奇怪怪的索引时,反倒会干扰MySQL的分析
(2)对于一些区分度不高的索引,如status、type这类只有几个值的字段,建索引就没意义了(索引树的树杈太少)
(3)可以在查询时强制指定使用某一个索引,如select xx from xx FORCE INDEX(IX_updatetime),就会强制使查询走IX_updatetime这个索引
- 查询别乱写,否则容易导致查询无法使用索引
(1)like查询时,通配符“%”放在最前面时无法使用索引
select xxx like ‘%abc’无法走索引,select xxx like ‘a%bc’可以走索引
(2)对列的函数运算无法走索引
select xxx where md5(password) = ‘xxx’无法走索引
(3)OR子句也用不到索引
(4)等等很多情况
0 0
- Mysql索引的选择性
- mysql 索引的应用
- MYSQL索引的使用
- Mysql索引的优化
- MySQL索引的使用
- MySQL索引的知识点
- mysql 索引的使用
- MySQL索引的使用
- mysql的索引
- Mysql索引的使用
- MySQL索引的使用
- MySQL索引的使用
- MySQL索引的使用
- mysql索引的限制
- mysql的索引
- mysql索引的使用
- MySQL的索引方式
- mysql索引的实现
- android studio 导入项目作为主工程依赖库
- 自动化定时调度之Azkaban部署及使用
- 设计模式--6大原则--依赖倒置原则
- CTO或者CEO怎么规划你的生活和工作
- VMware 使用 NAT 模式联网问题
- MySQL的索引
- 最近一直在配置自己的服务器,折腾了一点心得,准备记录一下1
- javaweb jsp制作留言板
- Android 网络之 Volley+OkHttp+Https
- pat PAT (Advanced Level) Practise 1007. Maximum Subsequence Sum (25)
- 成长历程—基础评教系统维护
- AsyncTask异步任务类的使用
- BZOJ3414: Poi2013 Inspector
- 第十三周,形状类族中的纯虚函数