SQL优化 MySQL版  - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

作者 Stanley 罗昊

索引分类

单值索引

单的意思就是单列的值,比如说有一张数据库表,表内有三个字段,分别是 id name age,我给age这个字段加一个索引,这就是单值索引,因为只有age这一列是索引;

一个表可以有多个单值索引,我不光可以设置age,我也可以吧name设置成索引,或许更多;

唯一索引

顾名思义,就是不能重复,比如age就不能被设置为唯一索引,因为年龄肯定是不唯一的,小明18岁,有可能小李也是18岁,这就重复了,所以age这一列不能被设置成唯一索引;

一般唯一索引就是Id;

复合索引

由多个列构成,相当于书的二级目录,比如我找“赵”这个字,它就先去Z里面找,然后再去zhao里面去找,找两次;

这个时候我把name跟age它两个共同组成一个复合索引,意思就是,我先根据name找人,如果名字重复了,我再根据age去找;

复合索引不一定必须两个列在一起使用,比如找李四,这个表里面就一个李四,就没有必要再去找age进行筛选;

创建索引的方式一

语法:careate 索引类型 索引名 on 表 (字段)//你现在在给那张表的那个字段加索引

创建单值索引

单值索引索引类型就是index;

careate index dept_index on tb(dept)

讲解:我要根据部门进行查询所以我就给部门加一个单值索引,dept_index就是我起的名字,dept就是部门的意思,名字可以随便起,但是要有意义,on后面跟上表名,我的数据库的这张表是tb,所以我写tb,括号里面写字段名;

创建唯一索引

careate  unique index name_index on tb (name)

讲解:unique 与 index 都是索引类型,这里我们就假设name是唯一的,创建方法跟上面一样,无非就多加了一个unique,去掉unique就是单值索引;

创建复合索引

careate  index dept_name_index on tb tb(dept,name);//程序会自动检测,如果你后面参数只有一个,那就判定你为单值,如果是一个以上,就判定你是复合!

讲解:我现在假设dept跟name这俩字段复合,我现在查询一个人的时候,先看他是哪个部门的(dept)如果大家都是开发部门的,那我再根据名字找,如果你不是开发部门的,那我我就直接找到了,就两次截然查询,也就是先根据部门,再根据名字;

创建索引的方式二

语法:alter table 表名 索引类型 索引名(字段)

创建单值索引

alter table tb add index dept_index(dept);

讲解:add就表示给tb这张表添加一个为index类型的索引,并起名为dept_index,要被加的字段是dept;

创建唯一索引

alter table tb add unique index name_index(name)

讲解:照猫画虎,跟上放基本一致,假设name字段是唯一不可重复

创建复合索引

alter table tb add index dept_name_index(dept,name)

讲解:先dept就是先根据dept查,再去根据name查,这个顺序是有意义的!

值得注意的是,两个创建方式的效果是一样的,任选其一,均不需要事物的提交(commit),因为两者都是DDL语句,程序遇到DDL会自动提交,但是你写了也不报错,就是什么也没提交而已;

事物只对DML语句进行操作,也就是增删改操作,这个需要理解!

注意:

如果一个字段是primary key(主键),则该字段默认就是主键索引,即便你没有给他加索引,他也是主键索引!

主键索引与唯一索引基本相似,区别就是,值不能为Null,而唯一索引可以!

主键索引:值不能重复 值不能为null

唯一索引:值不能重复 值可以为null

删除索引

语法:drop index 索引名 on 表名;

drop index name_index on tb;

讲解,我要删除的索引名字为name_index on 它属于 tb 表

查询索引

语法:show index from tb;

解析,看一下tb这张表的索引;

SQL性能问题

1.分析SQSL的执行计划

通过explain,可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的状况;

查询执行计划:explain+SQL语句;

举例:explain select * From bbs_detail,看一下执行结果:

我会在下篇文章详细介绍并且实战优化,在这里各位仅做了解即可;

解说:

id:顾名思义就是查询编号

select_type:查询类型

table:你在操作哪一张表

type:类型

key:实际使用的索引,你到底用了哪些索引

possible_keys:预测你用到了哪些索引,假设你用了八个索引,它这里就会显示八个,但是实际有效的只有五个,所以在key显示就是五个!

key_len:实际使用索引的长度;ref:表和表之间的引用关系;

rows:通过索引查询到的数据量;

Extra:额外的优化信息

2.MySQL查询优化器会干扰我们的优化

我在前几章说过有关为什么会干扰我们优化好的SQL语句,因为它内置有一个优化器,它会擅自篡改我们优化好的SQL语句;

今日感悟:

自利偏差告诉我们:

人在失败时会把原因归结到别人身上,

成功时更倾向把劳务归于自己,

印象管理告诉我们:

人在别人的面前,

会不知不觉地进行自我表演。

决断效应告诉我们:

人在选择以后,会通过自我说服,来让自己相信自己的选择是最好的

自我确定理论告诉我们:

人一般会喜欢和自己相似的人,这里面的爱,包含了对自己的肯定

学习心理学,自己能更好的了解自己,并理解他人;

原文:https://www.cnblogs.com/StanleyBlogs/p/10416865.html

mysql 几阶b树_SQL优化 MySQL版 - B树索引进阶详讲(一)相关推荐

  1. mysql生成树状执行计划_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

  2. mysql索引详讲_SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...

  3. mysql 单表查询 优化_SQL优化 MySQL版 - 单表优化及细节详讲

    单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  4. mysql 笛卡尔积影响_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

  5. 国美金融贷款安装mysql ,国美金融贷款优化MySQL配置

    国美金融贷款安装mysql 8.0. mysql80.sh里, 国美金融贷款安装过程需要确认: 1.国美金融贷款是否删除数据库数据存储路径:/var/lib/mysql ->y 2.国美金融贷款 ...

  6. mysql 多个值求和_SQL优化大神玩转MySQL函数系列(2)LEAST,SUM的应用

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 我已经写了有趣的SQL系列和MySQL函数系列 本文章我归为MySQL函数系列,其实两个之间哪个都行. 今天给大家带来的问题如下 有如图所示的表 ...

  7. mysql自动无序索引_SQL优化 MySQL版 - 避免索引失效原则(一)

    作者 : Stanley 罗昊 避免索引失效的一些原则 我们编写SQL语句后会进行添加一些索引进行优化,但是有时候确实建了索引,但索引有时候会失效: 比如在模糊查询使用 in 关键字的时候索引就失效了 ...

  8. mysql 大于号 优化_SQL优化 MySQL版 - 避免索引失效原则(二)

    避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...

  9. mysql关于or的索引问题_SQL优化 MySQL版 - 避免索引失效原则(二)

    作者 : Stanley 罗昊 体验SQL优化中的概率情况 在上一篇文章结尾处,我们在执行查询计划的时候,却发现我明明加了索引,并且也满足了使用索引的条件,但是,给我的优化结果却是失败,从而,得出一个 ...

最新文章

  1. python将数据存入数据库_python3 两种方法将数据存入mysql数据库
  2. 计算机组成原理实验箱使能开关,计算机组成原理微程序计数器实验报告
  3. 来了,单片机最强科普总结!
  4. 1555C. Coin Rows
  5. C语言enum关键字
  6. 管理开机启动:chkconfig
  7. jq判断是否为整数_五种js判断是否为整数(转)
  8. Drools 7.11 :入门程序
  9. SpringCloud集成Dubbo实现RPC调用
  10. Laravel5.2队列驱动expire参数设置带来的重复执行问题 数据库驱动
  11. 电脑更新重启后黑屏_电脑黑屏重启还是黑屏的解决方法教程
  12. 去年的今天我们举行了婚礼
  13. [转]“新欢乐时光”病毒源代码分析
  14. SoundTouch音频处理库
  15. 绕过校园网认证实现免费上网【三端】
  16. 计算机word中的行间距在哪里设置,word怎么把所有行间距设置成22磅
  17. linux超级管理员名字修改,linux添加超级管理员用户,修改,删除用户
  18. OpenStack Swift学习笔记
  19. 电商项目day09(网站前台之广告功能实现优化策略)
  20. No.5终于搞懂了kmp算法(精髓为next数组的求解过程,此文next数组未经过优化)

热门文章

  1. 编码器设计——Verilog HDL语言
  2. 生活-急救常识(1)
  3. StringUtils常用方法
  4. 视频教程-【H3C V7路由器实战课程系列-1 】WAN接口配置与管理-H3C认证
  5. python - windows 之 mouse_event与keybd_event函数
  6. 电影本身就很娱乐很轻松,恶搞反而做作了
  7. 中学教学能用上python吗_AI双师教学、用Python绘图 未来的中小学可能这样上课
  8. 安卓手机部署分割模型
  9. 河南省第十届ACM大学生程序设计竞赛总结
  10. asp.net webservice 安全 验证