索引
索引是对数库表中一列或多列的值进行排序的一种结构, 使用索引可提高数据库中特定数据的查询速度。
1.索引的作用
为了提高数据库从表或试图中查询数据的速度,改善数据库性能,如同书的目录一样, 我们可以通过目录快速找到某章节的内容。
2.索引的特点
索引是在存储引擎中实现的, 因此, 每种存储引擎的索引都不一定完全相同, 并且每种存储引擎也不一定支持所有索引类型,比较常见的MyISAM 和INNODB 存储引擎只支持B树结构的索引。
优点
1 .通过创建唯一索引, 可以保证数据库表中每一行数据的唯一性。
2 .可以大大加快数据的查询速度,可以加速表和表之间的连接。
3 .在实现数据的引用完整性方面, 可以加速表和表之间的连接。
4 .在使用分组不非序进行查询数据时, 也可以显著减少查询中分组合排序的时间。
加快数据查询的速度尤其是在数据量非堂大的情况下
缺点
1 . 创建索引和维护要耗费时间, 并且随着数据量的增加所耗费的时间也会增加。
2 索引需要占用磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间( ( InnoDB 数据表上的索引是表空间的一个组成部分 ,如果有大量的索引,索引文件可能比数据文件牛更快达到最大文件尺寸。
3 . 当对表中的数据进行增加、删除、修改等操作时, 索引也会动态的维护,这样就降低了数据的维护速度。
索引的设计原则
1 . 索引并非越多越好一个表中如果有大量的索引不仅占用磁盘空间, 而且会影响INSERT 、DELETE 、UPDATE 等语句的些能, 因为当表中的数据更改时, 索引也会进行调整和更新。
2 . 避免对经常更新的列设置索引, 并且索引中的列尽可能少。而对经堂于查询的字段应该创建索引,但要避免添加不必要的字段。
3 数据量的表最好不要使用索引,由于数额较少,查询话费的时旬可能比遍历索引的时旬还短,索引可能不会产生优化效果。
4 . 在不同值较少的字段上不必要建立索引, 如性别字段。
5 在频繁进行排序或分组的列上建立索引, 如果经常需要排序的列有多个,可以、在这些列上建立组合索引。
创建索引
MySQL 支持多种方法在单个或多个列上创建索引:在创建表时指定索引列时,使用ALTER TABLE语句 存在的表上创建索引, 或者使用CREATE INDEX 命令在已存在的表上创建索引
创建表的时候创建索引
使用C REATE TABLE创建表时, 除了可以定义列的数据类型,还可以定义主键约束、外键约束或者唯一约束,而不论创建那种约束在定义约束的同时当于在指定的列上创建了一个索引。
语法
CREATE TABLE table name [col_name_date_type]
事务
1.事务的特性( ACID )
- 到原子性(Atomicity)
事务是一个完整性的操作, 事务的各元素是不可分割的, 要么全都成功执行,要么就撤销所有的操作
- 一致性(Consistency)
事务完成前后, 数据必须保持完全一致的状态
- 隔离性(Isolation)
事务是相对独立的, 一个事务对数据进行修改时,其他事务是不能修改的
- 持久性(Durability)
事务完成后, 它对于系统影响是永久性的
2.事务并发问题〔多个事务同时取同一数据时,尽量避免)
。脏读: 发生在更新操作时. 一个事务t1 取了已经被事务t2更 新但未提交的字段后, t1 读取到的数据是临时的无效的。
。不可重读: 发生在更新后. 事务t1读 了一个字段, t2 更新了该字段之后, t1 再次读取, 值不同了。
。幻读: 发生在插入和删除时. 事务t1读取表中一个字段t2 插入了新行, 之t1再次读取同一个表多出几行记录.
3. 事务的隔离级别
隔离性用来解决多用户操作中的突发冲突问题, 隔离级别为:
。未提交读〔read uncommitted 〕
最低的隔离级别。事务能够读取其他事务正在修改并未提交的数据, 无法保证数据的完整性。
。已提交读〔read committed )
该隔离级别能确保其他事务不能读取当前事务正在修改但未提交的记录.
。重复读〔repeatable read )
mysql默认的隔离级别。隔离级别高,能确保其他食物不能修改当前事务中正在读取但未提交的数据。
。可串行化〔seriallzable )
最高的隔离级别,事务之间完全隔离,事务之间按串行化方式执行. 要访问其他事务操作的数据,一定要等其他事务完成提交之后才能进行.