大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引;

(一)前面课程的小节以及本节课程的逻辑梳理

在正式分享主题之前,jacky先跟大家捋顺一下前面课程的逻辑,本章节jakcy讲的是表层面的增删改查,jacky说对于表层面来说,最重要的是增,也就是如何创建表,为什么说创建表是重要的呢,因为在创建表之前我们要设计表的结构也就是搭建表的结构,那么表的结构要如何搭建呢?也就是表结构里有什么呢?首先要设定我们的字段名,字段也是列是吧,我们有些朋友学了半天,字段和列是一回事还分不清,这是不行的,字段后面要有约束是吧,接着jacky用说了约束字段的列类型,也叫数据类型,接着jacky说数据类型是字段的主要约束,还要有额外约束,是吧,那么额外约束就是字段属性,好,以上就是jacky前面讲的,是不是;这里jacky用创建数据表的SQL语句模型给大家总结一下:

--创建数据表的SQL语句模型
CREATE TABLE 表名称(
字段名1 数据类型 [属性]
字段名2 数据类型 [属性]
......
);
  • 好,到这里,大家思考一下,jacky花了这么长时间讲数据类型和属性,我们说它们都是数据约束是吧;约束约束说的这么文邹邹的,那到底约束是干什么的,换句话说为什么发明mysql的人,为什么要给软件设计一系列复杂的约束?

    • jacky说,为了弥补人类的愚蠢,在错误设计和操作时报错提醒;懂了吧,我们说学一样东西,就要这么领悟才过瘾,才透彻;
  • 好,接着上面的逻辑往下来,我们创建表是干什么的,是不是往表里放数据的,那为什么要往表里放数据,是不是为了存储数据用的,那存储数据为了什么,是不是为了后续调用的方便,那MySQL这么严谨的软件肯定要创建一种规则,要我们调用数据的速度更快,更方便,这就是我们本小节说的索引,那么索引这个规则在什么地方约定呢,我们说在搭建表结构时就约定它,这时我们创建表的SQL语句模式就扩充为:

--创建数据表的SQL语句模型
CREATE TABLE 表名称(
字段名1 数据类型 [属性] 索引
字段名2 数据类型 [属性] 索引
......
);

好,逻辑线给大家梳理完了,开始介绍我们的索引;

表索引

索引在咱们说自增的时候,我们提到了一次,咱们是不是说做快速检索用的,打一个比方,我们都查过字典吧,索引的作用就相对于字典中的目录的作用,我们查字典,如果没有目录,我们是不是得从头翻到尾查找,而且字典里是没有排序的,所以有目录和没有目录的区别就是,我们要查找一个字,有目录的我们1次就翻到了,没有目录的,如果字典有2000页,我们有可能要检索2000页,那我们的搜索速度是不是差的太多了,有目录的,我们的搜索速度就提高2000倍了,所以我们看到有一些网站特别的慢,我们改善的最佳方式就是给需要改善的那一列,加一个索引;

为了确保数据的完整性和一致性,我们在创建表的时候,我们需要指定字段类型之外,我们还需要为字段指定一些属性,而且我们需要使用一些约束条件,比如说主键索引,外键索引,唯一索引等等,

下面我们说一下索引的种类,一些资料中会把索引分的很细,比如说有全文索引等等,在实际工作中我们是比较少用的,也不重要,jacky在第一课中就说过,学习要抓住主要的,要抓住主逻辑,对于次要的知识我们不集中精力去学习,我们可以大致的找下资料,了解一下就可以了;好,我们言归正转,这里jacky表索引,或者精确的说表字段索引,分两种:主键索引和普通索引,这里我们要明确只有字段才有索引,字段是什么,字段是列,只有列才有索引,每个列就相当于一本字典,有多少列就相当于多少字典;

- 表里面每一个的索引有两种:

  -   主键索引

  -   普通索引

说明:每个表只能有一个主键索引,但是每一个列都可以是普通索引,主键索引比普通索引的速度更快,为什么要加索引?加了索引以后,可以让我们的检索速度更快;所以我们在实际工作中查找数据的时候,sql语句总会是where id等于几,where id 大于几,是不是,where什么意思,where是一个条件,当id大于10的时候,为什么这个where的条件语句总是跟着id来用呢?因为id是主键索引,这样的查询速度是最快的;

主键索引



  • 在一条sql语句中加desc是用来做调试检测的,看它总共影响了多少行,我们查找名字是andy这一行,我们总共检索了多少行,

  • 这个表看起来是不是很不舒服是吧,因为行放不下,是吧,我们mysql能不能把行列倒置显示,这样看起来就就会舒服,我们说mysql能不能这样,我们说能,我们只需在原sql语句后加\G,就可以了

  • 我们看到rows=1,rows代表的是检索行数,说明一共是5行,我们检索一行就检索到了,速度很快,我们可以看到,主键检索是非常快的,因为它有目录结构,

  • 我们不通过id字段,还可以通过什么方式找到andy这个人,是不是还可以通过name列,找到andy这个人,通过id=3找到这个人和通过name=’andy’找到这个人是不是一个道理,但用name列检索是不够优化的,总共检索了5行,这时我们对比可以看到,主键索引这个效果就出来了;

  • 每一个表只能有一列用主键索引,那其他列要想加索引就只能加普通索引了,

普通索引

  • 我们做优化时首先考虑的就是普通索引;

  • 我们在表结构已经可以看到在name列我们已经加上索引了,我那么想近一步的理解我们普通索引的名字xxname加在哪了,我们可以搜一下;

-查看表中的所有索引;

补索引(后期维护索引)

  • 下面我们说一下工作中一些常见问题的处理:

    • 我们在工作中创建表时,id列都是自增的,自增一定就是主键索引了,所以主键索引在创建表时就已经添加上了,大家说是不是,没有必要后期在加,

    • 在表创建完毕之后,开始我们没有想那么多,但是有一列后面经常要用,这时我们就要补索引,我们说工作中我们补的索引都是普通索引;

1.如何添加普通索引

alter table user1 add index in_xxname;

2.如果删除普通索引

  • 删除与表结构有关的sql语句-alter
alter table user1 drop index in_xxname;

表的字符集

一般来说,库的字符集是什么,表的字符集就是什么,当然MySQL服务器还有一个字符集,那么这个逻辑就是服务器的字符集是什么,库的字符集就是什么,库的字符集是什么,表的字符集就跟着是什么;

那怎么查看,我们当前状态下这些字符集都是什么呢?

\s

用latin1,没有好处,只有坏处。

MySQL开发者为瑞典MySQL AB公司,所以默认编码为latin1。

早期版本的编码都是latin1, latin1编码可以认为无字符格式的编码,什么字符都可以存,乱玛也可以存,至于里面是什么内容,只能靠客户端的程序来解释,这样你的程序里就莫名奇妙的要多了一个识别和转换编码的步骤。程序复杂度冤枉的增加了,性能也受影响。而且,在latin1编码中比较和排序都有问题。

MySQL数据分析-(13)表操作补充:索引的更多相关文章

  1. MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑 (一)学习逻辑 我们说创建 ...

  2. MySQL删除超大表操作

    ======================================================================== 问题原因 通常情况下,会使用innodb_file_p ...

  3. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

  4. MySQL之多表操作

    前言:之前已经针对数据库的单表查询进行了详细的介绍:MySQL之增删改查,然而实际开发中业务逻辑较为复杂,需要对多张表进行操作,现在对多表操作进行介绍. 前提:为方便后面的操作,我们首先创建一个数据库 ...

  5. mysql 库与表操作

    1. 库操作 1.1. 创建数据库 语法规则:create database 库名; CREATE DATABASE dt55; 在创建库时,希望指定编码语法:create database 库名 c ...

  6. 数据库之 MySQL --- 数据处理 之 表操作、CRUD(六)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. 表操作 创建数据库CREATE DATABASE demo-- 删除数据库DROP DATABAS ...

  7. python爬取信息到数据库与mysql简单的表操作

    python 爬取豆瓣top250并导入到mysql数据库中 import pymysql import requests import re url='https://movie.douban.co ...

  8. Mysql之数据表操作

    数据表操作: 查看当前数据库中所有的表: show tables; 查看当前使用数据库: select database(); 使用数据表: use 表名; 创建数据表: create table 数 ...

  9. mysql数据库之表操作及字段约束条件

    目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...

随机推荐

  1. (四)自定义多个Realm以及Authenticator与AuthenticationStrategy

    多Realm配置 #声明一个realm myRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1 myRealm2=com.githu ...

  2. winform PictureBox图片上动态添加Label或其他控件

    效果图: 代码: //分页或者多次加载时,需要删除之前产生的lable等控件 ; tabID < ; tabID++) { foreach (Control control in this.ta ...

  3. ASP.NET WEB应用程序(.network4.5)MVC 工作原理

    MVC就是模型.视图.控制器. 项目中控制器对应Controllers目录,视图对应Views目录,模型对应Models目录. 1.当我们创建一个控制器时,比如在Controllers目录新建一个名字 ...

  4. 使用Lua编写Wireshark插件解析KCP UDP包,解析视频RTP包

    前段时间写了一个局域网音视频通话的程序,使用开源 KCP 来实现可靠UDP传输. 通过研究发现KCP在发包时,会在数据包前面加上它自己的头.如果数据包较小,KCP可能会把多个数据包合成一个包发送,提高 ...

  5. python处理RSTP视频流

    python链接海康摄像头,并以弹出框的方式播放实时视频流, 这种方式是以弹出框的形式播放.本地测试可以,实际业务场景不建议使用.可以采用rtsp转rtmp的方式 @shared_task def p ...

  6. perl自定义简易的面向对象的栈与队列类

    perl中的数组其实已经具备了栈与队列的特点,下面是对数组经过一些封装的stack,queue对象 1.Stack类 创建一个Stack.pm文件 package Stack; sub new{ $s ...

  7. http通讯过程

  8. javascript冒泡事件详解

    冒泡事件: 定义:当多个Dom元素互相嵌套的时候,一个元素触发了某个事件(例如Click事件),那么嵌套此事件的所有元素都会被触发一次Click事件,注意:只会触发他的直系亲属元素,而与其自己,父级, ...

  9. macro 标签,和静态文件,以及templates

    1 模板 -Templates 1 什么是模板 模板,在Flask中就是允许响应给用户看的网页在模板中,允许包含“占位变量”来表示动态的内容 模板最终也会被解析成字符串再响应给客户端,这一过程通常称为 ...

  10. 两个linux服务器之间免密登录

    服务器A(假设为10.64.104.11) 免密登录服务器B(10.64.104.22) 1.登录服务器A 2.生成公私钥 ssh-keygen -t rsa 3.将生成的.pub文件发送到服务器B上 ...