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。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 记忆化递归(记忆化搜索)

    记忆化递归(记忆化搜索)前言​ 前一篇博客写到入门的dp算法,后来又遇到一个奇怪的变种题目,同样也是可以用dp写的(至少标签是有动态规划)。我看了答案还是有些不能完全理解,于是又去b站翻了翻教程基础DP,其中提到记忆化的递归(也称记忆化搜索),相当于结合了dp和递归的优点(这时我又觉得比DP还厉害),然后就准备写写记忆化递归。目录​ 1.记忆化递归的解释与分析​ 2.记忆化递归的应用一、记忆化递归的解释与分析前面说道它结合了dp和递归的优点,分别是记忆化和逻辑清晰易懂。下面还是结合斐波那契数列的来理解:F(.

  • 本地apache 可以正常访问,lnmp服务器访问404错误

    本地apache 可以正常访问,lnmp服务器访问404错误

  • 超硬核!小白读了这篇文章,就能在算法圈混了[通俗易懂]

    作为一只超级硬核的兔子,从来不给你说废话,只有最有用的干货!这些神级算法送给你目录第一节1.1bogo排序1.2位运算1.3打擂台1.4morris遍历第二节2.1睡眠排序2.2会死的兔子2.3矩阵快速幂2.4摔手机/摔鸡蛋时空复杂度目录二分尝试较优的策略归纳表达式写出暴力递归改为动态规划压缩空间四边形不等式优化换一种思路最优解测试:第三节3.1斐波那契之美3.2桶排序3.3快速排序…

  • zip文件后缀改成什么可以用_zip格式转rar格式

    zip文件后缀改成什么可以用_zip格式转rar格式案例2,批量修改文件扩展名\后缀名1上面介绍的是只修改某一类的后缀名,那么如果我整个文件夹下面的所有类型的文件都要修改怎么办呢?如下图什么类型的文件都有呢【强烈推荐】如何批量修改文件后缀名?超详细2其实也很简单,只需要修改一个参数就好了。如下图找到刚刚那个bat文件,右键编辑–或者用记事本打开。(注意:在*之前有一个英文的空格把命令改成,ren.*.gif  格式 ren空格星点星空格星点文件后缀名【强烈推荐】如何批量修改文件后缀名?超详细【强烈推荐】如何批

    2022年10月12日
  • mapminmax的用法

    mapminmax的用法几个要说明的函数接口:[Y,PS]=mapminmax(X)[Y,PS]=mapminmax(X,FP)Y=mapminmax(‘apply’,X,PS)X=mapminmax(‘reverse’,Y,PS)用实例来讲解,测试数据x1=[124],x2=[523];>>[y,ps]=mapminmax(x1)y=  -1

  • web默认端口号是多少_web网站的默认端口为

    web默认端口号是多少_web网站的默认端口为代理服务器常用端口计算机端口号范围1~65535,端口不能重复HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080SOCKS代理协议服务器常用端口号:1080FTP(文件传输)协议代理服务器常用端口号:21Telnet(远程登录)协议代理服务器常用端口:23常用端口说明端口:21服务:FTP说明:FTP服务器所开放的端口,用于上传、下载。…

发表回复

您的电子邮箱地址不会被公开。

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