mysql优化,SELECT语句创建理想索引

news2024/11/24 6:53:19

思考索引的问题:

    1.为什么主键索引比非主键索引快?

    2.为什么sql使用like关键字 “%XXX%”无法走索引,而“XXX%”可以?

    3.为什么有索引的字段,数据量大了后,增删改会很慢?

 一. 了解数据库索引的必要性

  对于稍微数据量大一点的表,如果不适用索引,那么性能效率都会很低;如果绕开了索引,直接进行分区分表,数据库集群读写分离来解决性能问题的话,那么未免也太小题大做了。

  对于大多数中小型系统,索引能够帮你解决90%的性能问题,所以索引是解决关系型数据库非常有利的武器。

       

二. 表和索引结构

  1.索引结构

               浅谈下B-TREE和B+TREE结构

               B-TREE

    

    B+TREE

    

  • B-Tree:

    B-Tree Visualization

  • B+Tree

    B+ Tree Visualization

        区别点:

  1. B-Tree的关键字分布在各个节点,不会重复出现. 而B+Tree的关键字都会出现在叶子节点
  2. B+Tree的非叶子节点不会保存数据信息. 数据信息都在叶子节点中
  3. B+Tree的叶子节点从左到右顺序排列,并且存在指针连接,是一个链表结构

  3.硬件特性

    硬盘磁盘的图可以用下图简单表示:

      

    我们的数据库表里的数据就保存在磁盘上,如果要读取数据,就要砖头磁盘,用磁头和磁盘的磁力来改变状态,来读取数据,所以,我们应该尽量少的转动磁盘,来优化数据库性能。

回到顶部

三.SQL处理过程

  

四.为SELECT语句创建理想索引

  1.三星索引

  三星索引是指一条sql所能达到索引的最优设计。

  第一颗星:

    如果与一个查询相关的索引行是相邻的,那么这个索引就为第一颗星。

  第二颗星:

    如果索引行的顺序与查询语句一致,则为第二颗星。

  第三颗星:

    查询的数据为索引的信息,不需要额外的磁盘随机读。这一颗星能大大改善性能。

  假设有一条sql语句如下所示:

    

  如果要满足一星索引:索引的顺序可以是LNAME,CITY或者CITY,LNAME

  如果要满足第二星索引:FNAME加在LNAME,CITY或者CITY,LNAME后面

  如果要满足第三索引:CNO也要在索引里面

  那么组合起来得三星索引就是:LNAME,CITY,FNAME,CNO或者CITY,LNAME,FNAME,CNO

五.前瞻性索引

  1.发现不合适的索引

  有两种基本的方法来发现不合适的索引:

            1.基本问题法(BQ)

            2.快速上线评估法(QUBE)

  在这里我仅仅讨论一下快速上线评估法(QUBE)

  

  2.快速上线评估法(QUBE)

   QUBE是悲观上限,它的目的是在早期发现程序设计的缺陷,并且及时更改。QUBE忽略了排队时间,锁竞争时间等,把问题单一化来评估sql的性能问题。

   下图就是QUBE计算评估sql时间公式:

              

   可以发现,TR和TS存在巨大的时间差距,随机访问会消耗大量的时间,那么来说说随机和顺序访问。

  随机访问:

    先说一说磁盘读和访问的区别。读是读取一页的信息,访问时访问一行的信息。所以单次随机访问的时间与一次磁盘随机读取的时间相同,都是10ms。

  顺序访问:

    一次顺序读是指物理上读取连续的下一行,这一行要么在同一页中,要么在下一页中,估算出来时间是0.01ms。

  FETCH:

    是FETCH调用次数来确定被接收行的数量。F的时间数量级要比TS大一级,但是要比TR小2级。

  下面给出一个简单的事例来说明QUBE计算方法:

      

  那么可以根据上面的公式得到:

      

  QUBE算法其实可以多结合自己的项目事例来计算判断一下,因为这个公式是很多年前的了,现在磁盘读写能力肯定有了显著提升,但是判断sql性能的方式是一致的。

  但是依照现目前的数据库磁盘读写能力和缓存技术,10ms的随机读可以换算成1ms.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADI Blackfin DSP处理器-BF533的开发详解45:图像处理专题-ThresholdData (图像阈值分割处理)(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像阈值分割处理,代码运行时,会通过文件系统打开工程文件根目下" …/ImageView"路径中的…

Hive中数据类型介绍

文章目录数据库表分区表桶表数据库 当于关系数据库中的命名空间( namespace ),它的作用是将用户和数据库的应用,隔离到不同的数据库或者模式中 Hive中创建数据库等语法 表 Hive 的表在逻辑上由存储的数据和描述表格数据形式的相关元数据组成 元数据&a…

腾讯电竞广泛布局,难逃城市同质化怪圈?

文 | 螳螂观察 作者 | 张左文 2018年的那个夏天,那年的《英雄联盟》S赛,中国战队IG以3:0的绝对领先击败欧洲老牌冠军战队FNC,为LPL赛区拿下首个S赛冠军奖杯。 那是中国电竞史上浓墨重彩的一笔,也是腾讯电竞8年蛰伏后腾飞的开始…

​实验8 IP协议实验分析

注:原实验是在虚拟机中对主机使用ping命令,本文对www.bilibili.com使用ping命令来代替 IP分片 实验内容 wireshak开始捕获分组后,在cmd中输入ping www.bilibili.com -l 3000并执行 打开wireshak,在显示过滤器中输入icmp。得到…

展锐闪光灯 flash echo test测试

flash echo test测试 1.使用adb命令进入对应路径操作: adb root adb remount adb shell cd /sys/devices/virtual/misc/sprd_flash/ 输入对应命令 如上图示例:echo 0x0000(0000 0000 0000 0000) > test flash_idx: 表示…

Nacos配置管理之多环境共享

多环境配置共享 微服务启动时会从nacos读取多个配置文件: 1、[spring.application.name]-[spring.profiles.active].yaml 例如:userservice-dev.yaml 【服务名】-【环境】.yaml 2、 [spring.application.name].yaml 【服务名】.yaml 例如&#xff1a…

kube-proxy模式详解

kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式,并且在v1.11中正式使用,其中iptables和ipvs都是内核态也就是基于netfilter,只有use…

仿写BitMap源码

bitmap的作用: 用来校验海量数字中某一个数字有没有出现过,海量数据中某一个数据有没有出现过 做一个长的比特数组,比特数组就会出现索引(0n),所有0n之间的数,比如123,就把所有比特数…

R语言画ROC曲线总结

在本文中,我描述了如何在CRAN中搜索用于绘制ROC曲线的包,并重点介绍了六个有用的包。 我使用pkgsearch来搜索CRAN并查看其中的内容。该package_search()函数将文本字符串作为输入,并使用基本的文本挖掘技术来搜索所有CRAN。 经过一番尝试和…

【Clickhouse】Clickhouse 精确去重计数性能测试

1.概述 4亿多的数据集上,去重计算出6千万整形数值, 非精确去重函数: uniq、 uniqHLL12、 uniqCombined 精确去重函数: uniqExact、 groupBitmap 结论: 整形值精确去重场景, groupBitmap 比 uniqExact至少快 2x+groupBitmap仅支持整形值去重, uniqExact支持任意类型去重…

中英文说明书丨艾美捷CD8α体内抗体介绍

艾美捷CD8α体内抗体英文说明: ICH1045 is up to 30% cheaper for academia & non-profits and up to 55% cheaper for industry than the equivalent product from Bio X Cell (BE0061). ICH1045UL is up to 31% cheaper for academia and up to 56% cheaper …

javaweb-Servlet的使用

xml设置 创建项目需要勾选下图的创建xml(适用于3.0以下版本,3.0以上的可以跳过使用下面的注解开发) 创建完项目后,找到web—WEB-INF—web.xml配置以下代码 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/…

隔离系列 宽电压输入 正负高电压稳压输出 高压稳压电源模块

特点 效率高达 80%以上1*2英寸标准封装电源正负双输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上应用 HRA 1~40W系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#xff1a;4.5~9V、9~18V、及18~36VDC标准&…

使用SAS,Stata,HLM,R,SPSS和Mplus的多层线性模型HLM

简介 最近我们被客户要求撰写关于多层线性模型的研究报告&#xff0c;包括一些图形和统计输出。本文档用于比较六个不同统计软件程序&#xff08;SAS&#xff0c;Stata&#xff0c;HLM&#xff0c;R&#xff0c;SPSS和Mplus&#xff09;的两级多层&#xff08;也称分层或层次&…

8年软件测试开发薪水被应届生倒挂,32岁的我裸辞了...

今年 32 岁&#xff0c;我从公司离职了&#xff0c;是裸辞。 前段时间&#xff0c;我有一件事情一直憋在心里很难受&#xff0c;想了很久也没找到合适的人倾诉&#xff0c;就借着今天写出来。 我一个十几年测试经验&#xff0c;八年 软件测试 经验的职场老人&#xff0c;我慢…

Docker运行MySQL容器

目录 一、宿主机与容器之间的文件拷贝 1.利用MySQL镜像安装MySQL服务 2.容器中怎么上传项目&#xff08;文件&#xff09; 3.从容器中拷贝文件到宿主机 4.从宿主机拷贝文件到容器 二、数据卷 三、数据卷容器 四、Dockerfile 本次目标&#xff1a; 数据卷Dockerfile …

C++初阶作业 Stackqueue 作业题一

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;实现几道Stack和queue的作业题 Stack queue作业题最小栈问题栈的压入弹出序列逆波兰表达式问题总结最小栈问题 它问题的题目描述是这…

Kafka极客 - 13 Kafka 中的高水位和 Leader Epoch 机制

文章目录1. 什么是高水位&#xff1f;2. 高水位的作用3. 高水位更新机制1. Leader 副本高水位更新机制2. Follower 副本高水位更新机制4. 副本同步机制解析5. Leader Epoch你可能听说过高水位&#xff08;High Watermark&#xff09;&#xff0c;但不一定耳闻过 Leader Epoch。…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【03】前端开发基础知识:ES6_Vue

持续学习&持续更新中… 学习态度&#xff1a;守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【03】前端技术栈类比ES6简介什么是ECMAScriptES6新特性let、const解构表达式字符串扩展字符串模板函数优化对象优化map、reducePromise&#xff08;异步编排&#xff…

第十四届蓝桥杯集训——JavaC组第十一篇——switch

第十四届蓝桥杯集训——JavaC组第十一篇——switch 目录 第十四届蓝桥杯集训——JavaC组第十一篇——switch swtich概述 switch语法 default作用 switch基础示例&#xff1a; String类型switch示例 switch枚举判断 巧用break 石头剪刀布 测试代码&#xff1a; swtich概…