索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
现在我们有一个student表 需要找到学号为8的学生信息
在没有索引的情况瞎,此时数据库查找过程类似于"顺序表"查找.
顺序表是在内存中进行查找的,内存访问的速度快,数据也不多,其速度也是可以的.
数据库顺序查找,数据库的数据是在磁盘上的,磁盘访问的速度慢,数据量很多,其速度就很慢.
索引就是为了避免数据库进行顺序查找,提高查找的效率
我们知道哈希表的查找效率是 O(1) 的,所以使用哈希表的话 查找一个数据就会非常的快,那为什么索引不用哈希表呢?
原因: 如果使用哈希表,只能处理相等的情况,无法处理 >``<``>=
等 情况.因为哈希表存储是没有顺序的.
我们知道二叉搜索树的 中序遍历结果是有序的.如果要查找 id<6 且 id>3
的数据.可以先找到 id =3
再找到 id = 6
然后中序遍历在找到 3~6之间的数据就可以了.相比于哈希表,二叉树能处理范围查找,那为什么不用二叉搜索树呢?
原因: 如果使用二叉搜索树,二叉树每个节点最多有2个叉,当数据量大时,树的高度就会较高,最终操作的效率也会非常低,而且二叉搜索树获取到中序遍历的效率也不是很高效O(N).这样效率很低,就跟普通查找效率差不多了.
不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快
叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据
通过中序遍历,可以访问树上所有节点
真实的索引是用的B+树.
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
创建主键约束( PRIMARY KEY)、唯一约束( UNIQUE)、外键约束( FOREIGN KEY)时,会自动创建对应列的索引。
show index from 表名;
示例:
create index 索引名 on 表名(字段名);
示例:
drop index 索引名 on 表名;
示例:
INDEX(columnA,columnB)
索引ALTER TABLE table_name ADD FULLTEXT(column)
; 来创建全文索引现有一个数据表,存储了一些人的银行账户,
现在有一个人A需要向B转账3000元.
此时就需要执行两个操作.
假如在执行操作1的时候,执行之后,网络出现错误,或 数据库挂了,A的钱少了B的钱没有增加,3000就凭空消失了?
解决方案: 使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务.
事务的基本特性称为 “ACID”
( 1) 开启事务: start transaction;
( 2) 执行多条SQL语句
( 3) 回滚或提交: rollback/commit;
说明: rollback即是全部失败, commit即是全部成功
测试表
drop table if exists accout;
create table accout(
id int primary key auto_increment,
name varchar(20) comment '账户名称',
money decimal(11,2) comment '金额'
);
insert into accout(name, money) values
('阿里巴巴', 5000),
('四十大盗', 1000);
操作截图:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/wwzzzzzzzzzzzzz/article/details/123340429
内容来源于网络,如有侵权,请联系作者删除!