Mysql高级操作

索引概述:

索引是高效获取数据的数据结构

索引结构:

B+Tree()

Hash(不支持范围查询,精准匹配效率极高)

树的区别:

二叉树:可能产生不平衡,顺序数据可能会出现链表结构

平衡二叉树:插入需要自旋,性能根据层级而定,性能不稳定

b+tree:

主键聚簇叶子节点存放数据,非叶子节点存放索引,

二级索引非叶子节点存放索引,叶子节点存放主键

索引优缺点:

优点:

大大加快查询速度

使用分组和排序时候可以显著减少分组和排序时间

唯一索引可以保证字段唯一

可以加速表与表之间的连接

缺点

创建和维护索引需要消耗时间,随着数据量增加时间也会增加

占用磁盘空间

对表进行urd操作时候也要动态维护,urd性能会下降

创建索引原则(我们对哪种数据创建索引):

更新频繁数据不易创建索引

数据量少的没必要创建,全表和用索引可能差不多

首先考虑在where和orderby字段建立索引

索引分类:

单列索引(只包含单个列):

主键索引:唯一且不为null,一个表只能有一个,(聚集索引:叶子节点下存储数据)

唯一索引:唯一且只能有一个Null值(二级索引,叶子节点存储主键)

普通索引:没有限制(二级索引,叶子节点存储主键)

组合索引/复合索引(包含多列):

为了避免回表,进行更高效的查询

全文索引:

like+%(InnoDB(5.6之后支持)默认3个字符,最大84,MyISam默认4最小1个字符)

空间索引(使用较少)

Sql性能分析

数据库的执行频次

慢查询日志

profile Sql执行查询

explain/desc执行计划查询

索引使用

联合索引:

遵循最左原则,如果最左使用中间跳过了某个字段,会造成后面索引失效,范围查询右侧的列会失效,尽量是<= ,>=

索引失效:

索引列进行了函数运算

没有遵循最有匹配原则

字符串类型索引没有加'',造成隐士转换,导致索引失效

左模糊查询

如果最左使用中间跳过了某个字段,会造成后面索引失效,范围查询右侧的列会失效,尽量是<= ,>=

mysql优化器判定全表比用索引块

or链接一侧有索引,一侧没有索引

sql提示:

多个索引下,可以提醒执行器是由哪个索引,建议使用,忽略使用,强制使用

覆盖索引:

查询返回字段都在联合索引中会直接拿到数据,避免回表即联合索引

前缀索引:

针对字段数据库较大的建立索引,缩小索引长度

单列/联合索引:

避免单列索引在and情况下第二索引不生效,使用联合索引,使用恰当可避免回表

索引设计原则

表层面:数据量大,且查询频繁

字段层面:经常在where groupby orderby后的字段

索引层: 唯一的建立唯一索引,尽量联合索引,大文本尽量前缀索引

附加原则:

区分度较高

索引不易过多

索引不为null加上非空约束

所长度尽量短

Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则的更多相关文章

  1. mysql基础操作学习笔记(2)----索引

    为什么要创建索引?     在此本人也带着相同的疑问,能够解释的仅仅是:为了减少数据库查询时所需要的速度.如果正常查询和索引查询所需时间相差很多倍时我们自然是需要索引的了. 想要知道结果,只能等我学得 ...

  2. mysql基础操作学习笔记(一)

    1前期准备: SQL语言包涵以下4个部分: (1)数据定义语言(DDL):包括DROP, CREATE, ALTER等语句 (2)数据操纵语言(DML):包括INSERT, UPDATE, DELET ...

  3. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  4. mySQl数据库的学习笔记

    mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...

  5. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  6. 【学习笔记】线段树—扫描线补充 (IC_QQQ)

    [学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...

  7. 《PHP7底层设计与源码实现》学习笔记2——结构体对齐

    书里给了一段代码,假如有个结构体如下: struct test {     char a;     int b;     long c;     void* d;     int e;     cha ...

  8. Javascript高级编程学习笔记(45)——DOM 操作表格及DOM动态集合

    操作DOM表格 早些时候,HTML 还是以表格布局为主, 所以DOM操作表格是比较重要的一点 但是现如今 有其它的选择,所以表格的操作也就慢慢地淡出了人们的视线 所以这里也就不过多去详细展开,这里也就 ...

  9. MySQL4.0命令操作学习笔记

    声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...

随机推荐

  1. mysql加强(6)~子查询简单介绍、子查询分类

    一.子查询简单介绍 1.什么是子查询? 一个查询之中嵌套了其他的若干查询. 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果. 子 ...

  2. 如果遇到继承控件,添加到新项目里在工具栏找不到的情况下,F5启动一下,重新生成是不会有的,要运行成功才有

    继承控件只的是cs结尾的那种,类直接继承对应控件,不是usercontrol类型的

  3. Uwl.Admin.Core开源框架(二) 使用QuartzNet

    Uwl.Admin.Core中使用QuartzNet定时任务模块: 本文负责讲解RabbitMQ的使用 Uwl.Admin.Core使用的技术有: *.Async和Await 异步编程 *.Repos ...

  4. JAVA char类型

    char类型表示的是单个字符类型,任何数据使用单引号括起来的都是表示字符.字符只能有一个字符. 注意:特殊字符的转义序列:转义字符 转义字符的概述: 特殊字符使用"\"把其转化成字 ...

  5. spring 注解注入bean

    通过注解方式注入bean,需要在配置类下注入bean 第一步,配置扫描文件夹 首先要在spring.xml中配置需要扫描的配置类 <context:componenet-scan base-pa ...

  6. python基础语法_3面向对象

    http://www.runoob.com/python3/python3-class.html https://www.imooc.com/learn/317 慕课网:987809563@qq.co ...

  7. nodejs并行无关联

    var async = require('async'); //串行无关联series//串行有关联waterfall//并行:parallel //会把各个函数的执行结果一起放到最后的回调中asyn ...

  8. Graph Based SLAM 基本原理

    作者 | Alex 01 引言 SLAM 基本框架大致分为两大类:基于概率的方法如 EKF, UKF, particle filters 和基于图的方法 .基于图的方法本质上是种优化方法,一个以最小化 ...

  9. pytest(12)-Allure常用特性allure.attach、allure.step、fixture、environment、categories

    上一篇文章pytest Allure生成测试报告我们学习了Allure中的一些特性,接下来继续学习其他常用的特性. allure.attach allure.attach用于在测试报告中添加附件,补充 ...

  10. MyBatis分页插件PageHelper使用方法

    1.导入相关依赖坐标 <!-- MyBatis分页插件 --> <dependency> <groupId>com.github.pagehelper</gr ...