索引的概念
数据库索引
是一个排序的列表,存储着索引值和这个值所对应的物理地址
无需对整个表进行扫描,通过物理地址就可以找到所需数据
是表中一列或者若干列值排序方法
需要额外的磁盘空间
索引的作用
当数据库利用各种快速定位技术能够大大加速查询速率
当表很大或查询涉及到多个表时,可以成千上万倍地提高查询速度
可以降低数据库的io成本,并且还可以降低数据库的排序成本
通过创建唯一性索引保证数据表数据的唯一性
可以加快表与表之间的连接
在使用分组和排序时,可大大减少分组和排序时间
索引的分类
普通索引
最基本的索引类型,没有唯一性之类的限制
创建普通索引的方式
#创建库
create database kgc;
#在库中创建kc65表
create table kgc.kc65 (id int, name varchar(255),age int);
#创建索引在kgc.kc65表中的id上面添加索引a1
create index a1 on kgc.kc65(id);
#创建索引在kgc.kc65的表中id上面添加索引a2
alter table kgc.kc65 add index a2 (id);
#创建表的时候创建索引
create table kgc.kc1 (id int, name varchar(255),age int,index a1(id));
唯一索引
与“普通索引”基本相同
与普通索引的区别是索引列的所有值只能出现一次,即必须唯一
创建索引的唯一方式
创建唯一索引
create unique index a3 on kgc.kc65(id);
创建唯一索引
alter table kgc.kc65 add unique a4(id);
创建唯一索引
create table kgc.kc2 (id int,name varchar(255),age int,unique a1(id));
主键索引
是一种特殊的唯一索引,指定为“PRIMARY KEY”
一个表只能有一个主键,不允许有空值
创建主键索引的方式
CREATE TABLE `kc3` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) NOT NULL ,
PRIMARY KEY (`id`)
);
组合索引
可以是单列上创建的索引,也可以是在多列上创建的索引
最左原则,从左往右依次执行
创建组合索引的方式
全文索引
MySQL从3.23.23版开始支持全文索引和全文检索
索引类型为FULLTEXT
可以在CHAR,VARCHAR或者TEXT类型的列上创建
创建索引的原则依据
表的组件,外键必须有索引
记录超过300行的表应该有索引
经常与其他表连接的表,在连接字段上应该建立索引
唯一性太差的字段不适合建立索引
更新太频繁的字段不适合创建索引
经常出现在where字句的字段,特别是大表的字段,应该建立索引
索引应该在选择性高的字段上
索引应该建在小的字段上,对于大的文本字段甚至超长字段不要建立索引
查看索引
#查看索引
show index from kc65;
#删除索引
drop index a1 on kgc.kc65;
事务的概念
是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行
是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小控制单元
适用于多用户同时操作的数据库系统的场景。
通过事务的整体性以保证数据的一致性。
事物的ACID特点
原子性(Atomicity)
一致性(Consistency)
隔离性(IsoIation)
持久性(Durability)
事物的控制方法
手动对事物进行控制的方法
事务处理命令控制事务
begin:开始一个事务
commit:提交一个事务
rollback:回滚一个事务
使用set命令进行控制
set autocommit=0:禁止自动提交
set autocommit=1:开始自动提交
use kgc
create table test (id int,name varchar(255),age int);
insert into test values(1,"张三",18);
索引是优化数据库性能的重要工具,但需要根据具体的应用场景和数据特点来合理使用。