Mysql相关知识...(持续更新ing)

Mysql中int、bigint、smallint 和 tinyint的区别详细介绍

https://www.cnblogs.com/yiwd/p/5531167.html

Mysql之动态SQL

https://www.cnblogs.com/ysocean/p/7289529.html

Mysql之批量更新update foreach

第一种方式:一条update

<update id="updateThreadreturnList"  parameterType="java.util.List">
    update table_name set isDelete=0
    where id in ( 
    <foreach collection="list" item="item" index="index" open="" close="" separator=",">
            #{item.id}
    </foreach>
            )     
  </update>

第二种方式:多条update

注意 需要在数据库添加 &allowMultiQueries=true
jdbc:mysql://192.168.1.109:3306/healthmanage?characterEncoding=utf-8&allowMultiQueries=true
<update id="updateQuestionseleteTempalteList"  parameterType="java.util.List">
    <foreach collection="list" item="item" index="index">
    update table_name set selectedName=#{item.selectedName}
    where 1=1 and  selectedId =#{item.selectedId  };
    </foreach>
  </update>

Mysql之Having与Where的区别

https://www.cnblogs.com/fanguangdexiaoyuer/p/6268211.html

Mysql之INSERT、UPDATE 获取自增主键(useGenerateKey与KeyProperty)

https://blog.csdn.net/coco_love24/article/details/81487486

MySQL之如何在数据库事务提交成功后进行异步操作

https://blog.csdn.net/varyall/article/details/78923592

MySQL之逻辑架构图

在这里插入图片描述

MySQL之最左前缀原则

mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先,如:

如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;
如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)、(col1,col2,col3)上建立了索引;

1、b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+树是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道第一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。

2、比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。(这种情况无法用到联合索引)

关于最左前缀的使用,有下面两条说明:

最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
关于最左前缀的例子,请参考:https://www.kancloud.cn/kancloud/theory-of-mysql-index/41857

MySQL之什么时候索引会失效

  1. 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
  2. 对于多列索引,不是使用的第一部分,则不会使用索引(即不符合最左前缀原则)
  3. like查询是以%开头
  4. 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  5. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

此外,查看索引的使用情况
show status like ‘Handler_read%’;
大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数
handler_read_rnd_next:这个值越高,说明查询低效

MySQL之between的边界,范围

https://blog.csdn.net/qq_31772441/article/details/80365585

MySQL之CASE函数

https://blog.csdn.net/qq_16605855/article/details/78043435

MySQL之索引底层实现原理

https://www.cnblogs.com/boothsun/p/8970952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值