Mysql索引相关知识汇总

1.不同存储引擎的区别及数据存储方式


innodb:

  1. 支持事务,支持事务的四种隔离级别;是一种具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

  2. 支持行锁和外键约束,因此可以支持写并发

       3. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除

       4.主键索引采用聚集索引最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

存储的文件结构:

一个Innodb表存储在一个文件内(共享表空间,表大小不受操作系统的限制),也可能为多个(设置为独立表空间,表大小受操作系统限制,大小为2G),受操作系统文件大小的限制

数据恢复方式:

在使用特定的恢复方法之前,InnoDB数据备份恢复还有两个通用的方法,分别是InnoDB的日志自动恢复功能,即重启mysql服务和“万能大法”——重启计算机。

如果是mysqldump完全备份,先恢复完全备份,然后再恢复完全备份后的增量日志备份。

如果是select into备份表,则采用load data或mysqlimport恢复。

如果是copy file,那么就停止MySQL服务,备份文件覆盖当前文件,并执行上次完全备份后的增量日志备份。

myisam: (我们公司dba建议尽量使使用innodb,数据容易恢复)

①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性、一致性、隔离性、持久性)

②不支持外键,支持表锁,每次所住的是整张表

MyISAM的表锁有读锁和写锁(两个锁都是表级别):

  表共享读锁和表独占写锁。在对MyISAM表进行读操作时,不会阻塞其他用户对同一张表的读请求,但是会阻塞其他用户对表的写请求;对其进行写操作时会阻塞对同一表读操作和写操作。

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?

       即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读请求要重要。

存储文件结构:

    ③一个MyISAM表有三个文件:索引文件,表结构文件,数据文件

    ④存储表的总行数,执行select count(*) from table时只要简单的读出保存好的行数即可

 (myisam存储引擎的表,count(*)速度快的也仅仅是不带where条件的count。这个想想容易理解的,因为你带了where限制条件,原来所以中缓存的表总数能够直接返回用吗?不能用。这个查询引擎也是需要根据where条件去表中扫描数据,进行统计返回的。)

⑤采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

MyISAM的索引图:索引文件的每个数据域存储指向数据文件的指针(每个索引指向了数据地址)

数据恢复方式:(缺点是可能会丢掉部分最新的数据)

如果是mysqldump备份,恢复方法是mysql –u root < 备份文件名;

如果是mysqlhotcopy或文件冷/热拷贝备份,恢复方法是停止MySQL服务,并用备份文件覆盖现有文件;

如果是BACKUP TABLE备份,使用restore table来恢复;

如果是SELECT INTO …OUTFILE备份,使用load data恢复数据或mysqlimport命令。


2.索引回表,覆盖索引,索引下推


索引回表:

索引回表是指,通过非聚簇索引查询数据时,会先通过索引的存储结构找到主键值,然后通过主键值再去查找数据;

覆盖索引:

索引覆盖是指,索引包含了需要查找的所有数据;(通过查询explain  (using  index)可以查看当前查询,是不是索引覆盖的高效查询);

索引下推:

索引下推是指,(SET optimizer_switch = 'index_condition_pushdown=off)

假设表t有联合索引(a,b),下面语句可以使用索引下推提高效率

select * from t where a > 1 and b > 2;

索引下推一般可用于所求查询字段(select列)不全是联合索引的字段,查询条件为多条件查询且查询条件子句(where/order by)字段全是联合索引。

ps:聚簇索引(主键)

再没有设置主键的情况下,即使第一个唯一索引为聚簇索引;

你可能感兴趣的:(Mysql索引相关知识汇总)