索引

索引的功能:

约束---主键、外键、唯一、普通、联合

加速查找

 

原理:索引数据库专门用于查找数据的一种数据结构,类似字典中的目录,查找字典内容时可以根据目录查找数据的存放位置。然后直接获取。

索引的代价:创建一个索引,会多生成一个文件。创建索引后,在插入、更新、删除等操作时,不仅会对原始表进行操作、而且还要对索引表进行操作。如果数据量很大,创建索引也要大量的时间。

 

 

普通索引----加速查找

create TABLE tb1(
id int PRIMARY KEY auto_increment,
name VARCHAR(20)
index ix_name (name)
)
或者
create index 索引名 on 表名 (列名)

删除索引  drop 索引名 on 表名

查看索引  show index from 表名

 

唯一索引----加速查找,约束列数据不能重复,只能有一个null

create  unique index 索引名 on 表名 (列名)

 

主键索引-----一般列设置为主键后,MYSQL就会自动生成一个主键索引

 

组合索引------联合唯一,加速查找,约束列不能重复,多列创建一个索引文件

普通组合索引  create index 索引名 on 表名 (列名1,列名2)

联合唯一索引  create unique index 索引名 on 表名 (列名1,列名2)

查找方式  最左匹配,select * from 表名 where 列名1=”xxx“,这样能走索引,即如果2列设置索引,在查找的时候会按照左边边的开始找

 

怎么查看当前sql是否走索引

explain SQL语句

 

注意事项:

避免使用select *

用count(1)或count(列)代替count(*)

能用char,就不用varchar()

组合索引代替多个单列索引

使用join来代替子查询

 

 

慢日志:

开启慢日志后,将一些查询慢的sql等写入到文件中,然后根据日志,可以优化SQL。慢日志的配置写在mysql的配置文件中。也可以直接修改内存的配置,不需要重启。

 

 

 

事务

事物是一个不可分割的工作单位,事物必须使数据库从一个状态切换到另一个一致性的状态,一个事物的执行不受其他事物的干扰,一个事物一旦提交,是对数据库的改变是永久性的

 

隐式事务:没有明显的开启和结束的标记,比如insert、update、delete

显式事务:必须有明显的开启和结束的标记(前提:必须先设置自动提交功能为禁用 set autocommit = 0)

语法:

步骤一:set autocommit = 0
start transaction(可选)

步骤二:编写事物的SQL语句(一般就是select、update、delete、insert语句)

步骤三:结束事物
commit 提交事物
rollback 回滚事物
savepoint 设置保存点 搭配rollback使用,回滚到当时的保存点处。

 

当同时运行多个事物,而这些事物访问数据库相同的数据时,如果没有采取隔离措施,就会导致并发问题。

脏读:

 

不可重复读:

 

 幻读:

 

 

MYSQL利用隔离级别避免并发问题

 

 

 

 

 

posted @ 2022-12-05 22:59  powfu  阅读(85)  评论(0)    收藏  举报