MySQL数据库
问而知
向Java提问,探寻代码内含的意蕴
展开
-
问一:如何设计一个数据库?
如何设计一个数据库? Relational Database Management System (MySQL服务器逻辑架构图) 执行前: 首先数据库内容存在哪儿?——文件系统的存储管理 SQL进来后如何知道它想获取什么内容?——SQL解析 如果一直都是同一个SQL怎么减少消耗?——缓存机制 执行中: 怎么加快SQL的查询效率?——索引机制 如果多个事务同时执行,如何保...原创 2019-04-22 10:19:29 · 539 阅读 · 1 评论 -
问九:什么是最左匹配原则?
导入: 顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。 例如:b = 2 如果建立(a,b)顺序的索引,是匹配不到(a,b)索引的;但是如果查询条件是a = 1 and b = 2或者a=1(又或者是b = 2 anda= 1)就可以,因为优化器会自动调整a,b的顺序(in和 =)。再比如a =...原创 2019-04-23 08:28:58 · 3922 阅读 · 1 评论 -
问八:什么是密集索引,什么是稀疏索引?
密集索引和稀疏索引: 聚簇索引:表数据文件本身就是按B+Tree组织的一个索引结构(它的物理存放顺序和逻辑顺序一一对应),这棵树的叶节点data域就是数据页,因此保存了完整的数据记录。innodb主键索引是是用聚簇索引来组织表且真实物理存储顺序只有一种,因此一个表中必须要有一个主键索引,如果没有设置聚集索引,默认使用主键来作为聚集索引。 (辅助索引,一个表中除聚集索引外,其它均为辅助索引(...转载 2019-04-23 08:28:06 · 4018 阅读 · 0 评论 -
问七:谈谈数据库索引?
为什么要使用索引? 避免全表扫描去查找数据,提升检索效率 什么样的信息能够成为索引? 主键、唯一键等只要是能让数据具备一定区分性的字段都能成为索引 数据库索引有哪些?区别?作用? 索引的数据结构: 生成索引,建立二叉查找树进行二分查找 生成索引,建立B Tree结构进行查找 生成索引,建立B+ Tree树结构进行查找(主流) 生成索引,建立Hash、BitMap结构进...原创 2019-04-23 08:25:57 · 217 阅读 · 0 评论 -
问六:间隙锁(Next-Key锁)是什么?
概述: 当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁 对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)【行锁+gap锁】 实例: 假如emp表中只有101条记录,其empid的值分别是 1,2,...,100,101,下面的S...原创 2019-04-23 08:24:48 · 5265 阅读 · 3 评论 -
问十五:MyISAM与InnoDB如何加锁?
1.MyISAM默认使用的是表级锁,不支持行级锁 2.InnoDB默认用的是行级锁,也支持表级锁 MyISAM不支持事物 InnoDB支持事物 表级锁就是在一个session访问的时候,MyISAM会将整个表给锁起来(读锁),如果有新session对这个表进行增删改时(写锁),会被阻塞 比如在一个session中手动加锁: 在另一个session中写: 就会失...转载 2019-04-26 13:22:56 · 274 阅读 · 0 评论 -
附:数据库常用操作
建个表(User): id name password salt head_url【用户头像】 CREATE TABLE `user`( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL DEFAULT '', `salt` VARCHAR(32) NOT NULL DEFAULT '', `hea...原创 2019-04-26 13:21:39 · 169 阅读 · 0 评论 -
问十四:char和varchar的区别是什么?
首先明确的是,char的长度是不可变的,而varchar的长度是可变的。 定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的, char的存取数度还是要...转载 2019-04-26 13:21:00 · 305 阅读 · 0 评论 -
问十三:说说数据库范式?
1NF:强调的是列的原子性,即一个列不能再分成其它几列。 2NF:首先强调必须满足1NF,其次满足:一是表必须包含主键;而是非主键的列不能部分依赖主键,必须完全依赖。 3NF:首先遵循前面两个范式,同时任何非主属性不依赖其它非主属性(即非主属性之间不能相互依赖)。 范式化设计的优点: 避免数据库冗余(在范式化设计中一个数据只出现一次,相反在反范式设计中数据可能会被冗余...原创 2019-04-26 13:20:23 · 191 阅读 · 0 评论 -
问十二:如何优化一个索引?
1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引。例如下面的查询不能使用 actor_id 列的索引: SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5; 2. 多列索引 当查询条件有多个字段时,单列索引和多列索引有很大的区别。 如果使用多列索引,where条件中字段的顺序...转载 2019-04-26 13:19:32 · 492 阅读 · 0 评论 -
问十一:解释一下如何查看慢日志和explain?
1.根据慢日志(记录执行的慢的sql的日志)定位慢查询sql SHOW VARIABLE LIKE '%query%' SHOW STATUS LIKE 'slow_queries' 查询慢查询有几条 SET GLOBAL slow_query_log = ON开启慢查询 SET GLOBAL long_query_time = 1 设置慢查询记录时间为1s 也可以在...原创 2019-04-26 13:18:34 · 378 阅读 · 0 评论 -
问五:什么是MVCC多版本并发控制?
MVCC的实现原理: InnoDB对每一行都加上了两个隐藏的列,其中一列存储行被修改的时系统的修改版本号,另外一列存储行被删除时的系统的删除版本号,以此实现了读不加锁、读写不冲突(不需要等待访问行上的锁释放,读取行的一个快照)。在读多写少的应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能。 MVCC的具体流程: 拿InnoDB在repeatable read隔离级别下来举例: 每...原创 2019-04-22 10:22:26 · 271 阅读 · 0 评论 -
问四:数据库事务隔离如何实现?
读操作的分类 首先将读操作分成两种,快照读 (snapshot read)与当前读(current read) 快照读:读取的是记录的历史版本 ,不需要对其进行并发控制,不用加锁。 当前读:读取的是记录的最新版本,并且当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录。 快照读:简单的select操作,属于快照读,不加锁。 select * from table where...原创 2019-04-22 10:21:55 · 175 阅读 · 0 评论 -
问三:说说事务的隔离级别?
事务的隔离级: SQL标准定义了四种不同隔离级别,并在这四种隔离级别上分别解决: 1.Read uncommitted能够防止更新丢失的问题 2.Read committed 解决脏读问题 3.Repeatable read 解决不可重复读问题,但是mysql在这个级别就解决了幻读 4.Serializable(可串行化) 解决幻读问题。 注: 1、mysql默认隔离级别是Re...原创 2019-04-22 10:20:58 · 375 阅读 · 0 评论 -
问二:数据库事务的四大特征是什么?
ACID 原子性(Atomic):事务包括的所有操作,要么全部执行,要么全部都不执行,回滚会原始数据 一致性(Consistency):事务应确保数据库的状态从一个一致的状态转换到另一个一致的状态(一致的状态是指:数据库中的数据应满足完整性约束,比如数据库中ab之间转账,他们一共200,那么事务结束后不管怎样,ab总和都是200) 隔离性(Isolation):多个事务并发执行时,一个事...转载 2019-04-22 10:20:01 · 176 阅读 · 0 评论 -
问十:如何优化SQL查询速度?
通过ANALYSE语句进行表的分析:SELECT * FROM USER PROCEDURE ANALYSE(); 使用此方法通知数据库进行键值分析,会返回每列属性的最大最小长度,多少行为空,所有行的平均值或者平均长度,同时会给出一些长度设置的建议 使用EXPLAIN验证优化程序的操作是否生效:EXPLAIN SELECT NAME FROM USER ORDER BY NAME DESC...原创 2019-04-23 08:30:00 · 577 阅读 · 0 评论
分享