博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql索引部分学习关于多列索引的部分
阅读量:7111 次
发布时间:2019-06-28

本文共 1033 字,大约阅读时间需要 3 分钟。

关于B-Tree:

此篇博客:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

 

关于加锁处理:

  阿里SQL大拿何登成的技术博客:http://hedengcheng.com/

    关于SQL中where语句的执行:http://hedengcheng.com/?p=577

 

索引的相关技术内容看了不少,《高性能Mysql》第5章也看的差不多了。

这里梳理下最近看的内容:

关于Mysql索引的类型:

mysql索引不止包括我们常见的B+树索引,常用的还有Hash索引等。

这里用到的技术有前缀索引(为了减小索引占用空间大小)、覆盖索引(提高数据检索效率),当然这些东西对于平时的SQL编写都是很有用处的。

Hash索引在现有的InnoDB索引中,是会作为一种优化手段存在再B+树的索引中的。

覆盖索引,其实很有用处,我们的索引如果建的足够优秀,是可以覆盖到所有需要查询的数据项的。这时候是可以不需要回表读取,单单读取索引就可以返回所有用户需要的数据的,高效与否可见一斑。

然后早上看《高性能Mysql》时候,有一个问题的疑问,因此今天着重翻看了下多列索引的情况。

基本的情况是这样的:

Q1:

mysql> select count(*) from userinfo where state_id=5;

Q2:

mysql> select state_id,city,address from userinfo where state_id=5;

原来的索引:state_id

那么,Q1的查询很理想,可是Q2的查询就不太理想,如果想更好的效果,那么创建了

mysql> ALTER TABLE userinfo DROP KEY state_id,     ->     ADD KEY state_id_2 (state_id, city, address);

)即创建一个覆盖用到列的索引,一个覆盖索引,为了避免重复索引,删除了Q1索引。

结果是:Q2查询性能提高了很多,但是Q2不够优秀了。数据百万级。

Q1的结果是:InnoDB引擎下,运行效率变化不大(轻微变小)。

      MyISAM引擎下,运行效率低很多。

然后书中,给出的理由是InnoDB没有进行前缀压缩。

转载于:https://www.cnblogs.com/aquariusm/p/9747536.html

你可能感兴趣的文章
聊聊storm的messageTimeout
查看>>
关于ueditor不能上传图片的问题的解决
查看>>
bootstrap4学习总结
查看>>
渣渣的蚂蚁金服面试经历(二)
查看>>
【静态页面架构】CSS之列表
查看>>
JavaScript引用类型---Object
查看>>
[LeetCode]两数相加(Add Two Numbers)
查看>>
react 学习手记
查看>>
React Virtual DOM 理解
查看>>
解析URL得到IP地址
查看>>
K8S常用命令
查看>>
opencv python 优化
查看>>
PHP排序算法之插入排序
查看>>
python_bomb----拷贝与赋值
查看>>
react踩坑之旅——字符串拼接 & this不起作用
查看>>
开发一个自己的 CSS 框架(三)
查看>>
SQLServer数据库增删改查
查看>>
spring scurity session管理
查看>>
浏览器兼容(CSS部分)
查看>>
安装cuda及jcuda中遇到的问题
查看>>