mysql创建索引

MySQL经典面试题

巧了我就是萌 提交于 2020-02-12 03:14:55
MySQL经典面试题 1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

MySQL经典面试题

流过昼夜 提交于 2020-02-12 03:09:24
1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)、MySQL如何保证复制过程中数据一致性及减少数据同步延时 一致性主要有以下几个方面

Mysql之表的操作与索引操作

孤人 提交于 2020-02-12 02:28:58
表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id int auto_increment, uname varchar(20), address varchar(200), updateTime datetime, primary key(id)); // 设置主键 2.表(show tables;)定义查看: show create table table_name; DESC table_name; show full columns from table_name; 3.表的更新: (1) 表的重命名:alter table old_user_name rename to new_user_name; rename table old_user_name to new_user_name ; (2) 增加列:alter table table_name add column column_nname(修饰); 在表的第一个位置增加字段,在语句最后加上FIRST,在表的指定字段之后添加,在最后加上AFTER 属性名; 例子:alter table user add column age int not null default 0

MySQL表及索引相关知识

怎甘沉沦 提交于 2020-02-11 16:32:50
1.表 1.1)建表 create table student( id int(4) not null, name char(20) not null, age tinyint(2) not null default '0', dept varchar(16) default null); show create table student\G 1.2)查看建表的结构 desc student; show columns from student; 1.3)查看已建表的语句 show create table student\G 2.索引 2.1 索引类型 1)主键索引:每个表只能有一个主键列 create table student( id int(4) not null AUTO_INCREMENT, name char(20) not null, age tinyint(2) not null default '0', dept varchar(16) default NULL, primary key(id), KEY index_name(name) ); 也可后来再添加主键: alter table student change id id int primary key auto_increment; 2)普通索引 alter table student drop

MYSQL数据库学习----索引和触发器

强颜欢笑 提交于 2020-02-11 16:29:14
一:索引 索引是创建在数据库表上,其作用是提高对表中数据的查询速度。 假设数据库中有一张1000条记录的表格,如果没有创建索引的话,用户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取一遍,满足查询条件的就加入结果集中,这样效率很低,如果表中创建了针对查询条件字段的索引,查询的时候会立即找到满足条件的记录加入结果集,不需要遍历过程,这样大大提高了数据库查询效率。 创建索引虽然提高了数据库表格的查询效率,但是也增加了数据库维护速度,因为索引需要占用物理空间,其次每次用户插入,更改,删除记录的时候都要同步操作索引,这样就造成数据维护速度降低,所以使用索引需要综合考虑索引的优点和缺点。 使用索引的几个建议 1.对经常作为查询条件的字段使用索引 2.如果需要用到索引尽量在整型字段上面使用索引 3.尽量使用唯一性的字段来创建索引 4.限制索引的数目,因为索引是占用物理空间的,并且数据更新需要同步操作索引,所以在索引的数量上面需要综合考虑 5.删除不再使用或者很少使用的索引 6.用户也可以在插入,更改,删除记录的时候先删除掉索引,在操作数据库,然后增加索引来使用 创建索引有几种方法: 1.创建表格的时候创建索引 创建普通索引 INDEX(字段名); 任意字段都可以 创建唯一索引 UNIQUE INDEX 索引名称(字段名); 唯一性字段可以

索引与触发器

百般思念 提交于 2020-02-11 16:19:28
1》索引的含义和特点:     索引是什么,索引相当于字典里面的目录序表,比如查询一个“星”字,如果不按照拼音来找的话,那么我们需要把整个字典全部遍历查询一边。才能查到这个字, 如果按照拼音来找的,那么只需要在几页音序表中查询。就可以通过音序就快速查到,这个字在字典的哪一页。在数据库中,索引是建立在表上面的,索引可以很大程 度上提高数据库的查询,同时也提高了数据库的性能,不同的存储引擎定义了索引的最大长度和索引的数量,所有的存储引擎对每个表最少支持16个索引,索引的长度 最少支持位256字节;   索引优点:     其优点可以提高数据的检索速度,针对于有依赖关系的子表和父表,在联合查询的时候可以提高查询速度。   索引的缺点:     创建和维护索引需要消耗时间,索引需要占用物理空间,每一个索引都需要占用一定的物理空间,大量的索引会影响插入数据,数据库系统会按照索引进行排 序,这样降低了插入数据的速度;    解决办法:在插入数据时,先临时删除表的索引,然后插入数据,数据插入完成后,再创建索引。 2》索引的分类:   Mysql的索引类型有:普通索引,唯一性索引,全文索引,单列索引、多列索引和空间索引等;   1>普通索引     创建普通索引时,不附加任何限制条件,,这类索引可以创建在任何的数据类型上面,   2>唯一性索引     使用unique参数可以设置唯一索引

《MYSQL入门很简单》学习笔记2——表,索引,视图,触发器

空扰寡人 提交于 2020-02-11 14:57:08
博客原文戳这里 第6章 表 6.1创建表 1.创建表的语法形式 CREATE TABLE 表名(属性名 数据类型 [完整性约束条件], …… ); 完整性约束条件 PRIMARY KEY FOREIGN KEY NOT NULL UNIQUE AUTO_INCREMENT DEFAULT 为该属性设置默认值 2.设置表的主键 单字段主键: 属性名 数据类型 PRIMARY KEY 多字段主键: PRIMARY KEY (属性名1,属性名2,…) 3.设置表的外键 CONSTRAINT 外键别名 FOREIGN KEY(子表属性1,子表属性2,…) REFERENCES 表名(父表属性1,父表属性2,…) 4.设置表的属性的默认值 属性名 数据类型 DEFAULT 默认值 6.2查看表结构 DESCRIBE 表名; DESC 表名; SHOW CREATE TABLE 表名 \G 6.3修改表 1.修改表名 ALTER TABLE 旧表名 RENAME [TO] 新表名; 2.修改字段的数据类型 ALTER TABLE 表名 MODIFY 属性名 数据类型; 3.修改字段名 ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型; 4.增加字段 ALTER TABLE 表名 ADD 属性名 数据类型 [完整性约束条件] [FRIST|AFTER 属性名2]; 5

InnoDB 事务加锁分析

六月ゝ 毕业季﹏ 提交于 2020-02-10 11:16:22
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/S7MhlsZveBHRSQhq5aTIJA 作者:何志创 一般大家对数据库事务的了解可能停留在事务的ACID特性以及事务4种不同的隔离级别层面上,而对于事务 4 种不同隔离级别如何实现了解相对较少。 本文以 MySQL 数据库 InnoDB 引擎为例,为大家分析 InnoDB数据库引擎对默认的隔离级别可重复读(RR)的具体实现。 整文知识点介绍:事务4种隔离级别、不同隔离级别解决的问题、MVCC、锁的类型、加锁案例分析;阅读完整文相信大家对事务隔离级别的具体实现有了一定的认识。 一、事务的隔离级别 1、4 种隔离级别 (1)未提交读(Read uncommitted): 一个事务读取到其他事务未提交的数据,是级别最低的隔离机制; (2)提交读(Read committed): 一个事务读取到其他事务提交后的数据; (3)可重复读(Repeatable read): 一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改; (4)序列化(Serializable) : 事务串行化执行,隔离级别最高,牺牲了系统的并发性。 2、不同隔离级别解决的问题 若不考虑事务的隔离级别,则事务的并发会造成以下问题: (1)脏读: 事务A读取了事务B更新的数据,然后B回滚操作

数据库的索引和锁

荒凉一梦 提交于 2020-02-09 20:10:34
一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度 表经常进行 INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度。 -索引需要占物理和数据空间。 了解过索引的最左匹配原则 知道索引的分类:聚集索引和非聚集索引 Mysql支持Hash索引和B+树索引两种 看起来好像啥都知道,但面试让你说的时候可能就GG了: 使用索引为什么可以加快数据库的检索速度啊? 为什么说索引会降低插入、删除、修改等维护任务的速度。 索引的最左匹配原则指的是什么? Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗? 聚集索引和非聚集索引有什么区别? … 1.1聊聊索引的基础知识 首先Mysql的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 而每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。 所以说,如果我们写 select*fromuserwhereusername='Java3y’这样没有进行任何优化的sql语句

suoyin

我与影子孤独终老i 提交于 2020-02-09 12:30:38
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树. 对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件