mysql创建索引

Redis面试题大全含答案

旧时模样 提交于 2019-12-02 02:08:38
Redis面试题大全含答案 Redis面试题大全含答案 1.什么是Redis? 答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 2.Redis的特点什么是? 1. 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算) 2. 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。 3. 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。 单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。 3.Redis数据类型有哪些? 答:String(字符串) Hash(hash表) List(链表) Set(集合) SortedSet

索引模型-和简单优化

天大地大妈咪最大 提交于 2019-12-02 00:51:28
索引 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样 InnoDB的索引模型 N叉树 以InnoDB的一个整数字段索引为例子,这个N差不多是1200。如果这棵树高4的化,就可以存储1200的3次方的值17亿了。考虑到根节点总是在内存中的,那么查一个数据最多只需要访问3次磁盘,而且其中第二层也很有可能在内存中,那么访问磁盘的平均次数就更少了。 B+树 每一个索引都有一颗B+树 假如有这么一张表,有一个id为主键和一个普通索引k的表 create table zx( id int primary key, k int not null, name varchar(16), index(k) )engine=InnoDB; 如果有R1-R5(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)和(600,6),那么两颗树的样子就如下图 主键索引B+树结构 主键索引的叶子节点存的是表的数据。在InnoDB里,主键索引也叫聚簇索引(clustered index) 分主键索引B+树结构 非主键索引的叶子节点内容是主键的值。在InnoDB里,非主键索引也被称为二级索引(secondary index) 区别 根据上面的内容,我们知道了数据是放在主键的索引结构中的,那么我们查询数据肯定最后会查询主键的索引树才会有数据。 案例 select * from

索引

為{幸葍}努か 提交于 2019-12-01 22:17:33
一、索引种类 1、普通索引:加速查询 create index 索引的名字 on 表名(列名) 2、唯一索引:加速查询与约束 unique index create unique index 索引的名字 on 表名(列名) 3、主键索引:在创建表的时候primary key 就是主键索引 # 添加主键 alter table 表名 add primary key(列名); # 删除主键 alter table 表名 drop primary key; alter table 表名 modify 列名 int,drop primary key; 4、组合索引(联合索引) create index 索引名 on 表名(列名1,列名2); 5、索引名词: 覆盖索引:在索引文件中直接获取数据 索引合并:把多个单列索引合并成使用 select * from userinfo where name = 'sb' and id='123'; 二、正确使用索引 #不能使用like与函数 #查询的时候类型一定要一致 #!= 这个如果是主键才走索引 #> 如果是主键或索引是整数类型就走索引 #order by 排序的时候选择的映射如果是索引就走索引,不是索引则不走 #组合索引最左前缀 如果组合索引为(name,email) name and email -- 使用索引 name -- 使用索引

mysql的索引的学习

浪子不回头ぞ 提交于 2019-12-01 20:42:40
优秀相关博客地址 1. https://www.cnblogs.com/liqiangchn/p/9060521.html 通俗易懂 一、索引的分类 1:从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。 2:从应用层次来分:普通索引,唯一索引,复合索引 3:根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。 ​ 1中所描述的是索引存储时保存的形式,2是索引使用过程中进行的分类,两者是不同层次上的划分。 不过平时讲的索引类型一般是指在应用层次的划分。 二、B、B+树 B+树是B-树的优化,B+树是非叶子节点做索引项,叶子节点做数据信息项,并且叶子节点每M个也就是一个数据页之间是使用指针进行关联,也就是B+树只需要遍历叶子节点就可以实现整个树的遍历,可以更加好地使用范围查询。 B+树增加和删除是符合B树的特性,当子孩子项大于M时,数据就会分裂,中间的节点就会充当父节点。 基于主键进行创建索引,可以减少当增加和删除时候产生的数据分裂的数据更新的操作。 三、聚集索引以及辅组索引 mysql 是使用B+树作为数据结构索引,并且再数据的物理量顺序和索引的顺序使用了聚集索引,也就是叶子节点是存储数据信息,而辅组索引是存储聚集索引的索引项,找到索引项之后又要进行二次索引再一次进行查询 四

Python服务端工程师就业面试指导 网盘下载

北战南征 提交于 2019-12-01 20:24:47
Python后端技术栈(六)--数据库 每日分享 What makes you different or weird—that’s your strength. 那些让你与众不同或怪异的,就是你的力量所在。 1.6数据库 上篇文章对网络编程中的一些经典问题做了总结,比如各种网络协议、IO 多路复用模型、并发库等等。 本篇文章将开始数据库的相关内容,开始咯~ 1.6.1 MySQL 1.6.1.1 MySQL 基础知识点 1.事务的原理,特性,事务并发控制 2.常用的字段、含义和区别 3.常用数据库引擎之间区别 1.6.1.2事务 Transaction 1.事务是数据库并发控制的基本单位 2.事务可以看做是一系列 SQL 语句的集合 3.事务的特性就是要么全部执行成功,要么全部执行失败(回滚) 我们最常见的就是转账操作这样一个使用案例。比如 A 给 B 转账,第一步是从 A 的账户查询一下余额还够不够,然后扣款。第二步是 B 的账户里面增加对应的金额。 从代码的层面来说,下面举一个 SQLAlchemy 框架执行回滚操作的例子: session.begin() try: item1 = session.query(Item).get(1) item2 = session.query(Item).get(2) item1.foo = 'bar' item2.bar = 'foo'

SQL优化-如何分析性能瓶颈

我只是一个虾纸丫 提交于 2019-12-01 20:23:29
MySQL优化一览图 笔者将优化分为了两大类: 软优化和硬优化 。软优化一般是操作数据库即可;而硬优化则是操作服务器硬件及参数设置。 1、软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息。 例: DESC SELECT * FROM `user` 其中会显示索引和查询数据读取数据条数等信息。 2)优化子查询 在MySQL中,尽量使用JOIN来代替子查询。因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高。 3)使用索引 索引是提高数据库查询速度最重要的方法之一,使用索引的三大注意事项包括: LIKE关键字匹配'%'开头的字符串,不会使用索引; OR关键字的两个字段必须都是用了索引,该查询才会使用索引; 使用多列索引必须满足最左匹配。 4)分解表 对于字段较多的表,如果某些字段使用频率较低,此时应当将其分离出来从而形成新的表。 5)中间表 对于将大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时。 6)增加冗余字段 类似于创建中间表,增加冗余也是为了减少连接查询。 7)分析表、检查表、优化表 分析表主要是分析表中关键字的分布;检查表主要是检查表中是否存在错误;优化表主要是消除删除或更新造成的表空间浪费。 分析表:

Mysql数据库 深度知识点

落爺英雄遲暮 提交于 2019-12-01 18:37:01
停止命令:net stop mysql 启动命令:net start mysql mysql登录命令 mysql -h ip -P 端口 -u 用户名 -p mysql --version 或者mysql -V用于在未登录情况下,查看本机mysql版本 select version();:登录情况下,查看链接的库版本 显示所有数据库:show databases; 进入指定的库:use 库名; 显示当前库中所有的表:show tables; 查看其他库中所有的表:show tables from 库名; 查看表的创建语句:show create table 表名; 查看表结构:desc 表名; 查看当前所在库:select database(); mysql语法规范 不区分大小写,但建议关键字大写,表名、列名小写 每条命令最好用英文分号结尾 每条命令根据需要,可以进行缩进或换行 注释 单行注释:#注释文字 单行注释:-- 注释文字 ,注意, 这里需要加空格 多行注释:/ **注释文字 **/ SQL的语言分类 DQL(Data Query Language):数据查询语言 select 相关语句 DML(Data Manipulate Language):数据操作语言 insert 、update、delete 语句 DDL(Data Define Languge):数据定义语言

Mysql中的索引

末鹿安然 提交于 2019-12-01 17:13:19
1,什么是索引,为什么要使用索引? 索引是帮助Mysql高效获取数据的排好序的数据结构。建立索引可以帮助我们快速检索我们需要的信息,减少磁盘的I/O次数,加快检索速度。索引的数据结构包括:二叉树,红黑树,Hash表,B-树等。 2,数据查询的方式 二叉查找树的方式查找信息 普通情况下,在一个二叉树中查找到5非常快速。只需要2步,但在某些极端情况下,如对于顺序插入信息的二叉树,查找到我们需要的信息就非常麻烦了。 红黑树 红黑树是一种 自平衡二叉查找树 ,就是会自动平衡更新根节点和其它节点的位置,也就是说根节点和其它节点的位置是不固定,会根据插入的信息进行动态改变的。 按照1~5的顺序插入数据后,会重新排列分支节点的位置。 对于少量数据使用红黑树是完全可以的,但是一个项目的数据库中存储的数据都是10万条以上,再使用红黑树,树的度又会变得很大了。这个时候就可以使用B 树了。 B 树 B树是一种 多路自平衡搜索树 ,它是一种特殊的平衡二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下: B树的特点: (1)所有键值分布在整个树中(2)任何关键字出现且只出现在一个节点中 (3)搜索有可能在非叶子节点结束(4)在关键字全集内做一次查找,性能逼近二分查找算法 比如我们想要找到主键为28的数据,过程如下: 1,根据根节点找到磁盘块1,进行一次I/O(磁盘的输入和输出)操作; 2

MySQL查询性能优化

蓝咒 提交于 2019-12-01 16:50:02
一、是否查询了不需要的数据 1.多使用limit来分页 2.不要用select *,特别是在多表关联的时候 3.避免重复查询相同的数据,可以多使用缓存 二、正确使用索引 如何正确使用索引见上一篇文章《MySQL索引》,这里再补充几个索引失效的案例: key(last_name, first_name, dob) 1.select * from blog_user where last_name like ‘%A%’; //使用like时通配符在前 2.select * from blog_user where last_name is null; //is null或is not null会放弃使用索引 3.select * from blog_user where UPPER(last_name) like 'A%'; //对索引列做了函数计算 4.select * from blog_user where last_name like 'A%' or first_name = 'b'; //使用or会导致索引失效,除非or的左右两边都分别正确使用索引。如select * from blog_user where last_name like 'A%' or last_name = 'b'; 5.隐式类型转换 6.隐式字符编码转换 创建blog_name表: CREATE

SQL 性能优化梳理

本小妞迷上赌 提交于 2019-12-01 13:39:15
先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开。 1 基本概念简述 1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写锁。简单提下乐观锁和悲观锁。 乐观锁 ,通常用于数据竞争不激烈的场景,多读少写,通过版本号和时间戳实现。 悲观锁 ,通常用于数据竞争激烈的场景,每次操作都会锁定数据。 要锁定数据需要一定的锁策略来配合。 表锁 ,锁定整张表,开销最小,但是会加剧锁竞争。 行锁 ,锁定行级别,开销最大,但是可以最大程度的支持并发。 但是MySql的存储引擎的真实实现不是简单的行级锁,一般都是实现了多版本并发控制(MVCC)。MVCC是行级锁的变种,多数情况下避免了加锁操作,开销更低。MVCC是通过保存数据的某个时间点快照实现的。 1.3 事务 事务保证一组原子性的操作,要么全部成功,要么全部失败。一旦失败,回滚之前的所有操作。MySql采用自动提交,如果不是显式的开启一个事务,则每个查询都作为一个事务。 隔离级别控制了一个事务中的修改,哪些在事务内和事务间是可见的