存储引擎:
MySQL有以下几种引擎:ISAM、MyISAM、HEAP(也称为MEMORY)、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、InnoDB、 Berkeley、Merge、Federated和Cluster/NDB等,除此以外我们也可以参照MySQL++ API创建自己的数据库引擎。下面逐次介绍一下各种引擎:
InnoDB(1事物支持,2行级锁 3自增长列 4外键 )MyISAM(1不支持事物 2表格锁 3表支持三种不同的存储结构:静态型、动态型、压缩型 4不支持外键)动态静态相对于字段的数据类型来说(有文本类型或字符串类型的列的表自动成为动态表否则自动成为静态表,动态表易产生碎片空间使用optimize table table_name清理或者转储数据清理)
HEAP(也称为MEMORY)(1默认使用hash索引也支持btree索引 2数据存储在内存中重启消失)。
CSV (1数据存储在.cvs文件中 2没有主键 3字段不能为null)
BLACKHOLE 特殊引擎一般不使用
ARCHIVE
PERFORMANCE_SCHEMA 该引擎主要用于收集数据库服务器性能参数。这种引擎提供以下功能:提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。
Berkeley(BDB) 该存储引擎支持COMMIT和ROLLBACK等其他事务特性。该引擎在包括MySQL 5.1及其以上版本的数据库中不再支持。
Merge 该引擎将一定数量的MyISAM表联合而成一个整体。
Federated 该存储引擎可以不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。这种存储引擎非常适合数据库分布式应用。
Cluster/NDB 该存储引擎用于多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大、安全和性能要求高的场景。
索引
:B+Tree索引和Hash索引
Hash索引 查询单条记录速度极快,不适合排序及范围查找(Memory引擎支持)B+Tree索引 适合排序及范围查找 (Inodb和Myisam存储引擎支持)
1,INDEX(普通索引):ALTER TABLE 'table_name' ADD INDEX index_name('col')
2,UNIQUE(唯一索引):ALTER TABLE 'table_name' ADD UNIQUE('col')允许有空值
3,PRIMARY KEY(主键索引):ALTER TABLE 'table_name' ADD PRIMARY KEY('col')不允许有空值
4,FULLTEXT(全文索引):ALTER TABLE 'table_name' ADD FULLTEXT('col')
5,组合索引:ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3')
索引的使用:
1 由数据库的查询优化器自动判断是否使用索引;
自动使用索引。数据库在收到查询语句后会查看where语句后面的查询条件,同时查看在表上面有哪些索引,然后根据查询条件和索引进行匹配。
查询条件和索引的匹配包括查询字段与索引字段的匹配和查询类型和索引类型的匹配。前者很好理解,就是查询条件的属性上要建有索引,后者则是说查询条件必须能够使用索引,
比如等值判断和范围查询可以使用B+树索引,而hash索引只能适用于等值判断。
2 用户可在写SQL语句时强制使用索引
(select * from table force index(PRI) limit 2;(强制使用主键) select * from table ignore index(PRI) limit 2;(禁止使用主键))
explain查询数据分析
table :查询的表。
type :反映出语句的质量。一般这个指标从好到坏依次是:
system>const>eq_ref>ref(最好能达到)>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL
为了保证查询至少达到range级别。最好达到ref,否则的话,只能说明这条语句性能有待提高。
ref 表示所有具有匹配的索引的行都被用到
range索引范围内查找
index全索引树扫描
all全表扫描
possible_keys:指出mysql在试用了哪个索引在该表中查找行。如果没有使用任何索引,就显示的NULL,可以用于对优化时的索引调整。
key:显示使用的索引,如果没有使用,则显示NULL
key_len:显示的是所使用的索引长度,如果没使用,则是NULL。当然,在使用索引的情况下,索引长度越小。效果越明显。
ref:显示使用那个列或常数雨key一起从表中选择行。
rows:执行查询的行数,如果行数越小,说明查询次数越少,效率越高。
extra:包含查询mysql解决查询的详细信息。