这里需要注意是:
- 哈希索引只存储哈希值和行指针 , 索引索引本身没有行数据 , 也就没有所谓的索引覆盖 。
- 哈希索引没有按哈希值的顺序排列 , 所有不支持排序操作 。
- 不支持部分索引列的匹配 , 哈希索引使用你指定的全部列来计算哈希值 , 列入(A , B)如果查询只有列A , 则索引无发匹配 。
- 哈希索引只支持等值比较(=、in(),<=>) 。
- 哈希冲突较高时 , 查找效率就变成了链表 , 复杂度从O(1)变为O(n) 。
全文索引:这是一种特殊类型的索引 , 他查找的是索引列中文本的关键词 , 而不是比较索引值 , 全文索引的使用要注意列的文本大小和数据量 , 它的匹配方式类似于搜索引擎 。
索引的优缺点?
- 大大减少了服务器扫描表的数据量 。
- 避免不必要的排序和临时表 。
- 将随机IO变为顺序IO 。
- 对于非常小的表 , 全表扫描可能比索引更快 , 对于中型数据量表 , 索引将会非常有效 , 对于TB级别的表来说 , 索引的维护和效果可能没有我们想象的那样好 , 这是可以使用表分区、业务拆分表和分库等技术 。
- 不要把索引的列纳入表达式 , 也不能是函数参数 , 如where aid+1=5、where to_days(col)<=10.
- 选择重复性较低的列建索引 , 重复性较高会导致索引失效 , 全表扫描 。
- 多列索引中很多常见的错误是 , 喜欢为每个列创建独立索引 , 实际上这是错误的!要选择合适的顺序和列来合并索引 , 来看个简单例子:

文章插图
分别建2个独立索引:inx_name, inx_company :

文章插图
现在执行以下语句:
SELECT * from tuser where `name`='22' or company='bb'结果显示并没有使用索引来查询数据:

文章插图
现在加一个多列索引:inx_name_company

文章插图
执行同样的sql显示使用了多列索引:

文章插图
- 不要在大文本字段建全量索引 , 这会然导致索引数据较大 , 查询较慢 , 可以建一个前缀索引 , 例如
//在city列上取前7个字符作为索引 mysql > alter table demo add key(city(7))
这是一种使索引更小 , 更快的方法 , 但缺点是无法使用缀索引order by或group by
【MySQL是如何利用索引的?】
推荐阅读
- mongodb,redis,hbase,三者都是nosql数据库,他们的最大区别和不同定位是什么?
- 如何在基于 Ubuntu 中查看一个软件包的依赖
- 如何快速减臀部赘肉呢?
- 晚上打篮球真的能长高吗
- 怎么锻炼臀部力量比较好
- 怎么可以提臀呢
- 怎样防止运动后长肌肉呢
- 古代卖菜的地方叫什么 古代菜市口是做什么的
- 宋是商朝后代 宋姓的历史
- 曹操一代枭雄旷世人杰 曹操一代枭雄是什么意思
