2021年8月15日

摘要: 不可以。因为这样会形成一个有序数组,文件系统和数据库的索引都是存在硬盘上的,并且如果数据量 大的话,不一定能一次性加载到内存中。有序数组没法一次性加载进内存,这时候B+树的多路存储威力 就出来了,可以每次加载B+树的一个结点,然后一步步往下找, 阅读全文
posted @ 2021-08-15 21:58 超人不会灰啊 阅读(187) 评论(0) 推荐(0)
 
摘要: 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速 度。 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立 簇索引,那么需要的空间就会更大。 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 阅读全文
posted @ 2021-08-15 21:56 超人不会灰啊 阅读(95) 评论(0) 推荐(0)
 
摘要: 将无序的数据变成相对有序的数据(就像查有目的一样) 阅读全文
posted @ 2021-08-15 21:56 超人不会灰啊 阅读(99) 评论(0) 推荐(0)
 
摘要: 阅读全文
posted @ 2021-08-15 21:54 超人不会灰啊 阅读(52) 评论(0) 推荐(0)
 
摘要: MySQL 索引通常是被用于提高 WHERE 条件的数据行匹配时的搜索速度,在索引的使用过程中,存在 一些使用细节和注意事项。 函数,运算,否定操作符,连接条件,多个单列索引,最左前缀原则,范围查询,不会包含有NULL值 的列,like 语句不要在列上使用函数和进行运算 阅读全文
posted @ 2021-08-15 21:50 超人不会灰啊 阅读(50) 评论(0) 推荐(0)
 
摘要: char的长度是不可变的,用空格填充到指定长度大小,而varchar的长度是可变的。 char的存取数度还是要比varchar要快得多 char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。varchar的存储方 式是:对每个英文字符占用2个字节,汉字也占用2个字节。 阅读全文
posted @ 2021-08-15 21:49 超人不会灰啊 阅读(50) 评论(0) 推荐(0)
 
摘要: 非空字段:应该指定列为NOT NULL,除非你想存储NULL。在 MySQL 中,含有空值的列很难进行查 询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者 一个空串代替空值; 取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过c 阅读全文
posted @ 2021-08-15 21:46 超人不会灰啊 阅读(152) 评论(0) 推荐(0)
 
摘要: 非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以 查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。 聚集索引(Innodb)的叶节点就是数据节点,而非聚集索 阅读全文
posted @ 2021-08-15 21:42 超人不会灰啊 阅读(239) 评论(0) 推荐(0)
 
摘要: 如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的 发音,这时候,您就不能按照刚才的方法找到您要查的字,而 需要去根据"偏旁部首"查到您要找的字, 然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合"部首目录"和"检字表"而查到的字 的排序并不是 真 阅读全文
posted @ 2021-08-15 21:38 超人不会灰啊 阅读(52) 评论(0) 推荐(0)
 
摘要: 聚簇索引就是按照拼音查询,非聚簇索引就是按照偏旁等来进行查询。 其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查"安"字,就会很自然地翻开字典 的前几页,因为"安"的拼音是"an",而按照拼音排序 汉字的字典是以英文字母"a"开头并以"z"结尾的, 那么"安"字就自然地排在字典的前部。 阅读全文
posted @ 2021-08-15 21:37 超人不会灰啊 阅读(259) 评论(0) 推荐(0)
 
摘要: NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。 CURRENT_DATE()仅显示当前年份,月份和日期。 阅读全文
posted @ 2021-08-15 21:36 超人不会灰啊 阅读(388) 评论(0) 推荐(0)
 
摘要: 第一种回答 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某 个环节。 。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执 行过一样。 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏 阅读全文
posted @ 2021-08-15 21:35 超人不会灰啊 阅读(601) 评论(0) 推荐(0)
 
摘要: (1)简单归纳: 第一范式(1NF):字段不可分; 第二范式(2NF):有主键,非主键字段依赖主键; 第三范式(3NF):非主键字段不能相互依赖。 (2)解释: 1NF:原子性。 字段不可再分,否则就不是关系数据库;; 2NF:唯一性 。一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在 阅读全文
posted @ 2021-08-15 21:18 超人不会灰啊 阅读(57) 评论(0) 推荐(0)
 
摘要: 第一范式 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数 据库就不是关系数据库。 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同 一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 如果出现重复的属性,就可 阅读全文
posted @ 2021-08-15 21:15 超人不会灰啊 阅读(121) 评论(0) 推荐(0)
 
摘要: 主键:用户选作元组标识的一个候选键程序主键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键 候选键:不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了! 外键:如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。 主键为候选键的子集,候选键为超键的子集, 阅读全文
posted @ 2021-08-15 21:02 超人不会灰啊 阅读(525) 评论(0) 推荐(0)
 
摘要: 如果一个索=引包含(或者说覆盖)所有需要查询的字段的值,我们就称 之为“覆盖索引”。 我们知道在InnoDB存储引 擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回 表”,也就是要通过主键再查找一次,这样就 会比较慢。覆盖索引就是把要查询出的列和索引是对应的, 不做回表操作! 阅读全文
posted @ 2021-08-15 20:55 超人不会灰啊 阅读(163) 评论(0) 推荐(0)
 
摘要: 在最频繁使用的、用以缩小查询范围的字段,需要排序的字段上建立索引。 不宜: 1)对于查询中很少涉及的列或者重复值比较多的列 2)对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。 阅读全文
posted @ 2021-08-15 20:50 超人不会灰啊 阅读(214) 评论(0) 推荐(0)
 
摘要: 1.设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 2.选择合适的表字段数据类型和存储引擎,适当的添加索引。 3.MySQL库主从读写分离 4.找规律分表,减少单表中的数据量提高查询速度。 5.添加缓存机制,比如Memcached,Apc等。 6.不经常改动的页面,生成静态 阅读全文
posted @ 2021-08-15 20:49 超人不会灰啊 阅读(152) 评论(0) 推荐(0)
 
摘要: B+tree的磁盘读写代价更低,B+tree的查询效率更加稳定 数据库索引采用B+树而不是B树的主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在 数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。 B+树的特点 所有关键字都出现在叶子结点的链表中(稠密索引),且 阅读全文
posted @ 2021-08-15 20:47 超人不会灰啊 阅读(153) 评论(0) 推荐(0)
 
摘要: 视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询;不包含任何列或数 据。使用视图可以简化复杂的 sql 操作,隐藏具体的细节,保护数据;视图创建后,可以使用与表相同 的方式利用它们。 视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by 则对视图再次 阅读全文
posted @ 2021-08-15 20:43 超人不会灰啊 阅读(444) 评论(0) 推荐(0)
 
摘要: FULLTEXT :即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索 引。 HASH :由于HASH的唯一(几乎100%的唯一)及类似键值对 阅读全文
posted @ 2021-08-15 20:41 超人不会灰啊 阅读(232) 评论(0) 推荐(0)
 
摘要: 分库与分表的目的在于,减小数据库的单库单表负担,提高查询性能,缩短查询时间。 通过分表,可以减少数据库的单表负担,将压力分散到不同的表上,同时因为不同的表上的数据量少了,起到提高查询性能,缩短查询时间的作用,此外,可以很大的缓解表锁的问题。 分表策略可以归纳为垂直拆分和水平拆分: 水平分表:取模分表 阅读全文
posted @ 2021-08-15 20:33 超人不会灰啊 阅读(336) 评论(0) 推荐(0)
 
摘要: 哈希索引,对于哈希索引来说,底层的数据结构肯定是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引 BTree索引,Mysql的BTree索引使用的是B树中的B+Tree,BTREE索引就是一种将索引值按一定的算法,存入一个树形的数 阅读全文
posted @ 2021-08-15 20:28 超人不会灰啊 阅读(220) 评论(0) 推荐(0)
 
摘要: 悲观锁,先获取锁,再进行业务操作,一般就是利用类似 SELECT … FOR UPDATE 这样的语句,对数据加锁,避免其他事务意外修改数据。 当数据库执行SELECT … FOR UPDATE时会获取被select中的数据行的行锁,select for update获取的行锁会在当前事务结束时自动 阅读全文
posted @ 2021-08-15 17:18 超人不会灰啊 阅读(136) 评论(0) 推荐(0)
 
摘要: 而在 MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个 回滚日志中,然后在对数据库中的对应行进行写入。 当事务已经被提交之后,就无法再次回滚了。 回滚日志作用: 1)能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息 2) 在整个系 阅读全文
posted @ 2021-08-15 16:36 超人不会灰啊 阅读(419) 评论(0) 推荐(0)
 
摘要: 视图是一种虚拟的表,通常是有一个表或者多个表的行或列的子集,具有和物理表相同的功能游标是对查询出来的结果集作为一个单元来有效的处理。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。 阅读全文
posted @ 2021-08-15 16:28 超人不会灰啊 阅读(47) 评论(0) 推荐(0)
 
摘要: 11、都知道数据库索引采用B+树而不是B树,原因也有很多,主要原因是 什么? 主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频 繁的,而B树只能中序遍历所有节点,效率太低。 12、文件索引和数据库索引为什么使用B+树?(第9个问题的详细回答) 文件与数据库 阅读全文
posted @ 2021-08-15 16:27 超人不会灰啊 阅读(94) 评论(0) 推荐(0)
 
摘要: 脏读、不可重复读和幻影读的概念 1、脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 2、不可重复 阅读全文
posted @ 2021-08-15 16:13 超人不会灰啊 阅读(250) 评论(0) 推荐(0)
 
摘要: 1.为搜索字段创建索引 2.避免使用 Select *,列出需要查询的字段 3.垂直分割分表 4.选择正确的存储引擎 阅读全文
posted @ 2021-08-15 15:50 超人不会灰啊 阅读(66) 评论(0) 推荐(0)
 
摘要: 第一种回答 Drop、Delete、Truncate都表示删除,但是三者有一些差别: Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚 (rollback)来执行删除或者撤销删除,会触发这个表上所有的delete触发器。 Truncate删除 阅读全文
posted @ 2021-08-15 15:39 超人不会灰啊 阅读(447) 评论(0) 推荐(0)
 
摘要: Server层按顺序执行sql的步骤为: 1. 客户端请求-> 2. 连接器(验证用户身份,给予权限) -> 3. 查询缓存(存在缓存则直接返回,不存在则执行后续操作)-> 4. 分析器(对SQL进行词法分析和语法分析操作) -> 5. 优化器(主要对执行的sql优化选择最优的执行方案方法) -> 阅读全文
posted @ 2021-08-15 15:12 超人不会灰啊 阅读(126) 评论(0) 推荐(0)
 
摘要: 可以分为服务层和存储引擎层两部分,其中: 服务层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如 存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模式是 阅读全文
posted @ 2021-08-15 15:12 超人不会灰啊 阅读(148) 评论(0) 推荐(0)
 
摘要: 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页 写满,就会自动开辟一个新的页。 如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录 都要被插到现有索引页得中间某个位置, 频繁的移动、分页操作造成了大量的碎片,得到了不 阅读全文
posted @ 2021-08-15 14:57 超人不会灰啊 阅读(132) 评论(0) 推荐(0)
 
摘要: 1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 3.帮助服务器避免排序和临时表 4.将随机IO变为顺序IO。 5.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 阅读全文
posted @ 2021-08-15 14:56 超人不会灰啊 阅读(219) 评论(0) 推荐(0)
 
摘要: 非关系型数据库也叫NOSQL,采用键值对的形式进行存储。 它的读写性能很高,易于扩展,可分为内存性数据库以及文档型数据库,比如 Redis,Mongodb,HBase 等等。 适合使用非关系型数据库的场景: 阅读全文
posted @ 2021-08-15 12:24 超人不会灰啊 阅读(469) 评论(0) 推荐(0)
 
摘要: 关系型数据库的优点 容易理解。因为它采用了关系模型来组织数据。 可以保持数据的一致性。 数据更新的开销比较小。 支持复杂查询(带where子句的查询) 非关系型数据库的优点 不需要经过SQL层的解析,读写效率高。 基于键值对,数据的扩展性很好。 可以支持多种类型数据的存储,如图片,文档等等。 阅读全文
posted @ 2021-08-15 11:55 超人不会灰啊 阅读(173) 评论(0) 推荐(0)