一.索引
1.1索引是什么
索引是指创建数据是的目录
1.2索引的优点与缺点
优点:是加速查询的速度
缺点:降低了增删改的速度
1.3创建索引的原则
1.3.1不要过度的索引
1.3.2在where条件最频繁的列上面加索引
1.3.3尽量引用列中数据重复不高的地方 查询频繁 区分度明显 长度小 尽可能覆盖常用的查询字段 负责加上索引意义不大
1.4索引的类型 索引还可以有长度比如 key (email(10)) 查看使用了什么索引在查询表前面加上 EXPLAIN
1.4.1普通索引 仅仅加快了速度 index
1.4.2唯一索引 行上的值不能重复 unique index
1.4.3主键索引 不能重复,一张表中只能有个主键,但是唯一索引不一定是主键索引,只能有一个主键,但是可以有多个或者一个唯一索引 primarykey
1.4.4全文索引 中文不支持(shpinx+中文分词)英文支持 条件是必须字符串类型的 mysql5.6以后myisam与innodb都支持之前的是innodb不支持myisam支持fulltextindex
1.4.5冗余索引 在某个列上存在多个索引 xm(xing,ming) ming(ming)
1.4.6多列索引 就是把两个或者两个以上的列,看成一个整体,加上索引 (记住左前缀) xm(xing,ming) 复合/.联合 索引 都是一样的
1.6.7btree索引与hash索引
btree索引的算法是二叉树算法 innodb和myisam都默认是用的btree索引
优点是:可以根据范围,排序,分组,都可以利用上索引,但是必须是有条件的 条件就是他的缺点没有
缺点是:单列索引的列不能包含null的记录,复合索引的各个列不能包含同时为null的记录,否则会全表扫描;不适合键值较少的列(重复数据较多的列);前导模糊查询不能利用索引(like '%XX'或者like '%XX%')
btree索引从数据结构上分为:聚簇索引和非聚簇索引
myisam是非聚簇索引
非聚簇索引指的是:数据和索引分离 myisam主索引与次索引都指向磁盘行上的位置 如果取数据还要回行拿数据
innodb是聚簇索引
聚簇索引指的是:主键索引结构中,既能存储主键值,又能存储行数据,这种结构被称为聚簇索引
如果没有主键:
则会以唯一索引作为主键,如果也没有呢,系统会为你自动生成的
优势:根据主键查询不用回行
劣势:碰到不规则的数据插入时,造成叶分裂(也就是指的二叉树)
非聚簇索引与聚簇索引的区别
1.聚簇索引的叶节点就是数据节点,而非聚簇索引的叶节点仍然是索引节点,并保留一个链接指向对应数据块(还要通过一个回行进行查找)。
2.聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。
3.相比之下聚簇索引适合排序,非聚簇不适合排序,因为聚簇索引本身就是排好序的只需从索引上走一遍就完事了啊
hash索引的的算法是hash算法 myisam和innodb都不支持hash索引 money引擎支持hash索引
优点是一次性的找到数据不像btree索引从根支点找到子支点那样麻烦,可以准确的相应的数据,
缺点是查询范围 重复值较多的列 排序 分组 不能利用部分索引查询 ……比较慢
1.5索引操作
1.5.1 普通索引 alter table 表名 add 索引类型(index/unique/fulltext) 索引名字(列名) 主键索引 alter table 表名 add primary key(列名)
1.5.2 删除普通索引 alter table 表名 drop index 索引名字||drop index 索引名 on 表名 删除主键索引 alter table 表名 drop primary key
1.5.3 show index from 表名
1.5.4 该索引就是删完了在增加
二.事物
2.1事务具有ACID属性 mysql的引擎必须为innodb 开启事物 start transaction
即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性
Atomic原子性:要么都成功要么都失败,不可能出现其他的情况。
Consistent一致性:事物的前后是一致的状态。
Isolated隔离性:在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程除非commit/rollback。
Durable永久性:事物发生后是改变不了的。
三.引擎
3.1 文章,新闻等安全性要求不高的经常查询的,选myisam
3.2 订单,资金,账单,火车票等对安全性要求高的,可以选用innodb
3.3对于临时中转表,可以用memory型 ,速度最快 memory 引擎 哈希索引 内容 不怕散列查询