在哪个网站可以找到做国珍的人移动互联网应用技术

当前位置: 首页 > news >正文

在哪个网站可以找到做国珍的人,移动互联网应用技术,网站怎么换域名,江浙区域网络公司排名索引 索引的介绍 索引是帮助MySQL高效获取数据的数据结构#xff0c;是一种特殊的文件#xff0c;包含着对数据表里所有记录的引用指针#xff0c;因为索引本身也比较大#xff0c;所以索引一般是存储在磁盘上的#xff0c;索引的种类有很多#xff0c;不过如果没有特殊…索引 索引的介绍 索引是帮助MySQL高效获取数据的数据结构是一种特殊的文件包含着对数据表里所有记录的引用指针因为索引本身也比较大所以索引一般是存储在磁盘上的索引的种类有很多不过如果没有特殊说明我们一般认为索引是一个B树的结构。 索引的作用 优势 可以提高列检索的效率降低搜索成本。对提高数据库的性能有很大的作用。通过索引对数据进行排序也可以大大提高排序效率数据库中的表、数据、索引之间的关系类似于书架上的图书、书籍内容和书籍目录的关系。 劣势 会占用磁盘空间有时可能会比较危险在创建索引时需要对现有的数据进行大规模的从新整理(调整存储的数据结构),如果当前是一个空表或者数据不多创建索引一般没有什么问题如果这个表本来就很大此时创建索引就需要对所有数据进行重新调整结构重新存储就有可能把服务器给卡住一般来说创建索引都是在创建表时就规划好的。 索引的使用 查看索引 show index from 表名 举例 create table demo( id int primary key, age int, name varchar(20)); show index from demo; 创建索引 create index 索引名字 on 表名(列名); 举例 create index index_id on demo(id); show index from demo;//这里的举例只是为了讲解 删除索引 drop index 索引名 on 表名; drop index index_id on demo;show index from demo; //主键unique外键都是会自动生成索引的 索引内部的原理和逻辑 如果没有特殊说明我们一般认为索引是一个B树的结构。 二叉搜索树 博主在之前的博客中有详细讲解过二叉搜索树如果有兴趣可以去看看。 B树 在将B树之前我们要先了解一些B树B树又叫多路平衡查找树他并不是一棵二叉树而是一棵多叉树每个结点有M个子节点M称为B树的阶 B树的特点包括 每个节点可以有多个子节点这使得B树能够优化大块数据的读写操作。B树的所有叶子节点都在同一层保持了树的平衡。B树中的关键字从小到大排列每个结点上有M个key划分出M1个区间叶子节点不包含关键字指向这些外部结点的指针为空叶子结点的数目正好等于树中所包含的关键字总个数加1。 每个结点可以看作是一个区间从无穷小到无穷大每一个关键字都会将这个区间划分每个小区间又可以向下延申出子结点又或者说每个结点里所包含的关键字大小都在其对应的父结点的相应的小区间里 举例:查找7 首先从根结点开始7比10小所以在10左边的区间然后继续查找比较7比3大在3右边的区间继续查找比较在这个结点中可以查找到7查找结束。 进行查询的时候就可以直接从根结点出发判定当前要查找的数据在节点上的哪个区间决定下一步往哪里走进行添加/删除元素可能会涉及到结点的拆分和结点的合并 //B树可以有效的减少访问硬盘的次数从而大大提高检索的性能 B树 为了进一步提高检索的性能在B树的基础上改造得到了B树B树是B树的改进针对数据库量身定做B树也是一个N叉搜索树一个结点上存在N个key划分成N个区域每个节点上N个key中最后一个就相当于当前子树的最大值父节点上的每个key都会以最大值的身份在子节点的对应区间中存在(key可能会重复出现)叶子节点这一层包含整个树的数据全集B树会以链表的形式把叶子节点串起来(此时就方便我们进行遍历也方便按照范围取出一个子集) 假如说要查询id26 and id62的就可以根据head进行查找 B树的优点(相较于B树以及哈希红黑树) N叉搜索树树的高度有限降低了IO次数增加了效率范围查找效率较高所有查询的最终结果都落到子节点查询次数较稳定由于叶子结点是全集会把行数据只存储在叶子节点上非叶子节点只是存储一个用来排序的key(比如存个id) 事务 事务的介绍 我们先来举一个例子假如我们现在要去银行把钱转账给另一个人那么把这个操作简化为MySQL语句的话就是我的账户删除一条数据另一个人的账户插入一条数据那么假如中间出现了错误我的账户少了另一个人的账户没有变这样的场景显然是不合理的。 事务就是将多条sql语句打包为一个整体要么都执行要么都不执行事务把多个sql打包为一个整体来执行称之为“原子性”(意为不可再拆分)。 也就是说在执行事务时如果其中有一条或者多条语句出现错误那么所有执行的语句都会回滚(回到执行前的状态),收到影响的数据也会回到事务开始之前的状态当所有语句都执行成功后事务也就顺利进行了 事务不仅仅有原子性还有一些其他方面的特性 原子性回滚的方式保证这一系列操作都能执行正确或者恢复如初一致性事务执行之前和之后要保证数据的合理性比如不能出现前文例子中的一方账户的金额少了一方账户金额不变持久性事务做出的修改都是在硬盘上持久保存的重启服务器数据仍然存在事务执行的修改任然是有效的隔离性一个事务的执行不能被其他事务干扰数据库在并发执行时事务之间是隔离的 事务的使用 隐式事务 没有明确的开始和提交的标志具有自动开始和提交事务的功能在默认状态下mysql就是自动提交事务 显式事务 和隐式事务不同需要自己手动开始事务和提交(commit)/回滚(rollback)在使用显式事务时要先将自动提交事务关掉方法就是将变量autocommit的值改为0 首先准备一个表 具体步骤如下 #第一步开始事务 start transaction; #第二步编写事务中的sql语句 update test2 set gpa 3.8 where id 6; update test2 set gpa 4.1 where id 5; #第四步提交事务 commit; #rollback回滚事务将数据回到执行事务之前 并发事务时会遇到的问题 脏读 一个事务A正在写数据的过程中另一个事务B读取了同一个数据接下来事务A又修改了数据导致B之前读的数据是一个无效的数据/过时的数据(也称为脏数据) 解决脏读的核心思路就是对写操作进行加锁(规定在A写的时候B不可以读)之前A和B时并发执行的在加锁之后并发程度和效率就降低了但是隔离性和数据准确性提高了 不可重复读 在并发执行事务的过程中如果事务A在内部多次读取同一个数据的时候出现不同的情况这种情况就是不可重复读即事务A在两次相邻的读取操作之间有一个事务B修改了数据并提交了事务。 刚刚写加锁时我们只是规定在写的时候不能读但是没有规定在读的时候不能写那么我们想要解决不可重复读就要再进一步加锁也就是规定在读的时候也不能写。 这样之后并发程度和效率就又降低了但是隔离性和数据准确性依然提高了 幻读 一个事务A执行过程中两次读取操作数据内容虽然没改变但是结果集变了(比如又多出一个文件)虽然我们刚刚约定了在读的时候能写在写的时候不能读但是当事务A再写A文件的时候事务B不能读A文件但是事务B可以读B文件 这时我们只好从根本上解决将两个事务完全分离比如A执行完了之后才能执行B这样就完全没有并发效率自然是最低但是隔离性和数据准确性都是最高 事务的隔离级别 一个事务和另一个事务的隔离程度称作隔离级别 read uncommitted(读未提交)  没有加锁并发程度最高速度最快隔离性最低准确性最低read committed(读已提交) 引入写加锁只能读写完之后提交的版本并发程度降低速度降低隔离性提高了准确性提高了repeatable read(可重复读)  引入了写加锁和读加锁写的时候不能读读的时候不能写并发程度又进一步降低了速度降低隔离性提高准确性提高serializable串行化严格的按照串行的方式一个一个的执行事务并发事务最低(没有并发)速度最低隔离性最高准确性最高 //四种隔离级别对应上面的三个问题隔离级别越高并发程度越低准确性越高速度越慢。 oracle默认的事务隔离级别是read committed mysql默认的事务隔离级别是read committed 以上就是博主对mysql–索引事务的分享如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主也希望多多支持博主之后和博客