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. django入门 03 模板语法

    变量值从views.py传入html 基本语法 {{ abc }} 变量abc外,用双大括号包裹 {% for item in abc %} 语句外,用大括号+百分号包裹 1. 传递字符串 views ...

  2. 计算机电子书 2020 CDNDrive 备份(预览版)

    下载方式 pip install CDNDrive # 或 # pip install git+https://github.com/apachecn/CDNDrive cdrive download ...

  3. git clone 命令

    感谢原文作者:寻芝彬 原文链接:https://www.jianshu.com/p/c992c799f2dd 描述 拷贝一个 Git 仓库到本地 实例 拷贝一个 Git 仓库到本地,本地目录名称与Gi ...

  4. SendMessage 键值

    转载请注明来源:https://www.cnblogs.com/hookjc/ SendMessage(hWnd,WM_SETFOCUS,0,0); SendMessage(hWnd,WM_ACTIV ...

  5. Java定时器Timer使用方法详解

    感谢大佬:https://www.jb51.net/article/129808.htm 一.概念 定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和 ...

  6. K8是—— yaml资源清单

    K8是-- yaml资源清单 一.yaml文件详解 1.Kubernetes支持YAML和JSON格式管理资源对象2.JSON格式:主要用于api接口之间消息的传递3.YAML格式:用于配置和管理,Y ...

  7. 一键部署lnmp

      一键部署lnmp 提前将nginx .mysql .php  所需安装包都放在/opt目录下 脚本启动结束时,重启一下nginx 服务,就能在火狐浏览器更新出php测试页 脚本如下:(脚本里的软件 ...

  8. python语法_1基础语法概述

    http://www.runoob.com/python3 章节:教程.基础语法.数据类型.解释器.注释.运算符. 大纲 查看python版本 实现第一个python3.x程序,hello world ...

  9. netty系列之:让TCP连接快一点,再快一点

    简介 经典的TCP三次握手大家应该很熟悉了,三次握手按道理说应该是最优的方案了,当然这是对于通用的情况来说的.那么在某些特殊的情况下是不是可以提升TCP建立连接的速度呢? 答案是肯定的,这就是今天我们 ...

  10. Ceres 四重奏 之 入门简介

    Ceres 翻译为谷神星,是太阳系中的一颗矮行星,于1801年被意大利神父 Piazzi 首次观测到,但随后 Piazzi 因为生病,跟丢了它的运行轨迹. 几个月后,德国数学家 Gauss,利用最小二 ...