MySql优化

MySql优化MySql优化

大家好,又见面了,我是你们的朋友全栈君。

mysql多表连接查询的模式

  1. 左表和右表的共有部分,即内连接
    SELECT fileds
    FROM TableA AS A
    INNER JOIN TableB AS B
    ON A.key1 = B.key2;
  2. 左表和右表的共有部分+左表的全部,即左连接
    SELECT fileds
    FROM TableA AS A
    LEFT JOIN TableB AS B
    ON A.key1 = B.key2;
  3. 左表和右表的共有部分+右表的全部,即右连接
    SELECT fileds
    FROM TableA AS A
    RIGHT JOIN TableB AS B
    ON A.key1 = B.key2;
  4. 左表独有的部分
    SELECT fileds
    FROM TableA AS A
    LEFT JOIN TableB AS B
    ON A.key1 = B.key2
    WHERE B.key2 IS NULL;
  5. 右表独有的部分
    SELECT fields
    FROM TableA AS A
    RIGHT JOIN TableB AS B
    ON A.key1 = B.key2
    WHERE A.key1 IS NULL;
  6. 左表的全部+右表的全部
    mysql不支持full outer join,只能用union来实现
    SELECT fields
    FROM TableA AS A
    LEFT JOIN TableB AS B
    ON A.key1 = B.key2
    UNION
    SELECT fields
    FROM TableA AS A
    RIGHT JOIN TableB AS B
    ON A.key1 = B.key2;
  7. 左表独有的部分+右表独有的部分,即内连接的补集
    SELECT fields
    FROM TableA AS A
    LEFT JOIN TableB AS B
    ON A.key1 = B.key2
    WHERE B.key2 IS NULL
    UNION
    SELECT fields
    FROM TableA AS A
    RIGHT JOIN TableB AS B
    ON A.key1 = B.key2
    WHERE A.key1 IS NULL;

索引

1. 索引的概念

官方定义:索引是帮助mysql高效获取数据的数据结构。划重点:数据结构。在数据之外,数据库系统还维护了一套满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这种数据结构就是索引,可以简单的理解为”排好序的快速查找数据结构”。索引本身也很大,不可能全部存储在内存,通常以索引文件的形式存储在磁盘中。

2. 索引按结构分类及其检索原理

BTree索引
Hash索引
full-text全文索引
R-Tree索引
一般Java开发工程师用到的是BTree索引,或者称为B树索引,其检索原理如下图所示

如果要查找数字93,在第一层判断93<100,因此找左边的指针;在第二层判断93>80,因此找右边的指针;在第三层的磁盘块中找到了存储的93。B树索引的纵向层次决定了一次检索需要几次IO,因此纵向层次越少,性能越优。一般三层B树可以处理100万数据,如果不使用索引,可能需要几万到几十万次IO,但使用索引只需要3次。
在这里插入图片描述

3. 索引按字段分类

单值索引:索引只包含1个列,一个表可以建多个单值索引
复合索引:索引包含多个列
唯一索引:索引列的值必须是唯一的,但允许有空值

4. 新建索引

CREATE [UNIQUE] INDEX indexName ON tableName(columnName);
ALTER TABLE tableName ADD [UNIQUE] INDEX indexName (columnName);
以上两个语句都可以用于新建索引。其中,indexName是索引名称,tableName是表名,columnName是列名,如果是多列索引中间用逗号分隔,如果新建的是唯一索引,需要加UNIQUE。

5. 删除索引

DROP INDEX indexName ON tableName;
其中,indexName是索引名称,tableName是表名,表示删除指定表的指定索引。

6. 查看索引

SHOW INDEX FROM tableName\G
其中,tableName是表名,\G是为了显示格式优化。

7. 索引的优势

提高数据检索效率,降低数据库的IO成本
通过索引对数据进行排序,降低CPU消耗
因此,索引有两个功能,分别作用在WHERE字句和ORDER BY子句上。

8. 索引可能引起的问题

索引也是一张表,保存了主键和索引字段,并指向实体表的记录
索引提高了读表速度,却降低了写表的速度,因为在进行INSER、DELETE、UPDATE操作时,不仅要保存数据,还要保存因更新表带来的索引信息变化
索引并不是随便加,也不是越多越好,过多的或者不恰当的索引,反而会降低数据库的效率,一般一个表不应超过5个索引。

9. 适合建索引的情况

主键自动建立唯一索引
连表查询时,对外连接的字段
频繁用作查询条件的字段,即WHERE filedName = ‘xxx’
需要排序的字段,即ORDER BY fieldName

10. 不适合建索引的情况

频繁更新的字段,因为每次更新都需要更新索引信息
WHERE子句里极少用到的字段
表记录数量太少,一般低于百万数据的表,建索引意义不大,超过300万性能才开始下降
数据大量重复且平均分布的字段,建索引意义不大,例如一个字段表示性别,值不是男就是女,且出现的概率差不多,就没有必要建索引。
关于最后一条,涉及一个概念:索引的选择性。索引的选择性是指一个字段的不同的值的数量跟表的记录数的比值,例如一个字段可能存在8888个值,这个表共有10000条记录,那么在这个字段上建的索引的选择性就是0.8888。索引选择性越接近1,它的效率就越高。上面提到的”性别”字段,可能存在的值只有2个,如果这个表有10000条记录,那么如果在这个字段上建索引,它的选择性只有0.0002。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106407.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月23日 上午11:40
下一篇 2022年4月23日 上午11:40


相关推荐

  • 实例分割与语义分割_genitive case

    实例分割与语义分割_genitive case摘要本文提出了一个简单的全卷积网络来实现实时的实例分割(from加州大学戴维斯分校)MSCOCO数据集——mAP=29.8%,33fps,在单个TitanXp上实验,比目前任一方法都要快速,并且只使用了单个GPU。为何获得如此好的效果:将实例分割任务分成了两个并行的过程:产生一系列模板mask预测每个实例mask的系数之后将模板mask和实例mask系数进行线性组合来获得实……

    2022年8月23日
    7
  • Zabbix监控mysql主从状态

    Zabbix监控mysql主从状态首先我们要监控主从是否正常同步,那么我们需要知道的是,什么东西或者说现象可以判断它的主从复制是正常的是正确的。如上图所示,上述两个参数若同时为yes则说明主从同步正常。那么我们现在就需要用命令去把这个正确的主从复制的状态表达出来。mysql-uroot-p123456-S/data/mysql/3308/mysql3308.sock-e”showslavestatus\G”|…

    2022年5月25日
    44
  • html如何引入css文件?HTML引入外部css文件的四种方法

    html如何引入css文件?HTML引入外部css文件的四种方法在学习前端的时候 我们应该知道 css 给 html 标记添加各种样式 用来告诉浏览器 因该如何显示这些标记里面的内容 既然 css 是用来给 html 添加各种样式的 那么 html 中如何引入外部的 css 文呢 本篇文章将给大家来介绍关于 html 引入 css 文件的四种方法 下面我们就来看看具体的内容 1 html 引入 css 文件之直接在 div 中使用 css 样式制作 div css 网页 divstyle border 1pxredsolid html 引入 css 文件说明 htm divstyle border 1pxredsolid

    2026年3月17日
    2
  • 一文读懂微生物扩增子16s测序[通俗易懂]

    一文读懂微生物扩增子16s测序[通俗易懂]微生物多样性测序结果如何看?做过16s测序的小伙伴们都知道测完之后会拿到一份结果报告但这并不代表可以开始写文章了看似一大堆数据图表却不知如何下手这是很多人头疼的地方那么怎样给报告中的数据赋予灵魂让它真正成为对你有帮助的分析呢?一文扫除困惑首先什么是16SrRNA?16SrRNA基因是编码原核生物核糖体小亚基的基因,长度约为1…

    2022年6月8日
    55
  • idea激活码mac【在线破解激活】「建议收藏」

    idea激活码mac【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    65
  • flash人物原地走路,Flash制作小人走路简单动画图文教程「建议收藏」

    flash人物原地走路,Flash制作小人走路简单动画图文教程「建议收藏」很多用户都想掌握Flash中的各种制作动画的技巧,今天极限下载小编就为大家分享如何利用Flash制作小人移动的动画,是对形状补间的一次简单运用,值得一说的是形状补间做的小人比起动画补间来说要轻松简明不少,而且动作多变,不过易出现问题,用flash制作小人走路的简单动画,一起来看看吧!工具/原料flashCS3FLASH基础方法/步骤1、首先利用椭圆工具和刷子工具在舞台上画一个小人,形状自己定,反正…

    2022年4月29日
    398

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号