时间:2019 年 02 月 11 日 ~ 2019 年 02 月 15 日
第七周总结
一、为什么主线程没有被 Looper#loop() 方法的死循环卡死
二、对 requestDisallowInterceptTouchEvent() 方法的理解
三、简单理解 MySQL 索引
3.1 索引特点
很容易想到 MySQL 索引可以大大提高检索速度
优点:
1.通过创建唯一索引,保证数据表每行数据的唯一性
2.大大加快数据查询速度
3.在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间
缺点:
1.维护索引需要耗费数据库资源
2.索引需要占用磁盘空间,索引文件可能比数据库文件更快达到最大文件尺寸
3.当对数据表进行增删改时,因为要维护索引,所以速度会受到影响
3.2 分类
索引是在存储引擎中实现的,即不同的存储引擎会使用不同的索引
存储引擎 MyISAM 和 InnoDB 只支持 BTREE 索引,不能更换
存储引擎 MEMORY/HEAP 支持 BTREE 和 HASH 索引
2.1 全文索引(FULLTEXT)
只有在 MyISAM 引擎上才能使用,只能在 CHAR、VARCHAR、TEXT 类型字段上使用全文索引
就是在一堆文字中,通过其中的关键字找到该字段所属的记录行
举个栗子:“我去年买了个表,还买了个包”,通过“表”就可能可以找到该条记录,这里说的是可能,是因为全文索引的使用涉及了很多细节,但大致是这个意思
2.2 单列索引
① 普通索引(NORMAL):基本索引类型,没有什么限制,允许定义索引的列中插入重复值和空值,纯粹是为了查询速度快一点
② 唯一索引(UNIQUE):索引列中的值是唯一的,允许空值
③ 主键索引:一种特殊的索引,不允许有空值
2.3 组合索引
在表中的多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用,使用符合索引时遵循最左前缀集合
2.4 空间索引
空间索引是对空间数据类型的字段建立的索引,MySQL 中的空间数据类型有四种:GEOMETRY、POINT、LINESTRING、POLYGON
创建空间索引时,使用 SPATIAL 关键字,创建空间索引的列必须声明为 NOT NULL,且引擎必须为 MyISAM
3.3 索引操作
格式:
CREATE TABLE table_name[col_name data type] // 创建表语句
[unique|fulltext|spatial] // 创建什么样的索引
[index|key] // 索引关键字
[index_name] // 索引名字
(col_name[length]) // 对哪个字段设置索引
[asc|desc] // 对索引进行排序
UNIQUE:可选,表示索引为唯一性索引
FULLTEXT;可选,表示索引为全文索引
SPATIAL:可选,表示索引为空间索引
INDEX 和 KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的
index_name:可选,给创建的索引取一个新名称。
col_name:指定索引对应的字段的名称,该字段必须是前面定义好的字段
length:可选,指索引的长度,必须是字符串类型才可以使用
ASC:可选,表示升序排列
DESC:可选,表示降序排列
举个栗子:
① 创建普通索引
CREATE TABLE book (
bookid INT NOT NULL,
bookname VARCHAR (255) NOT NULL,
AUTHORS VARCHAR (255) NOT NULL,
info VARCHAR (255) NULL,
COMMENT VARCHAR (255) NULL,
year_publication YEAR NOT NULL,
INDEX (year_publication) // 对字段 year_publication 设置索引
)
查看表结构:
SHOW CREATE TABLE book
结果:
② 创建组合索引
CREATE TABLE Person (
id INT NOT NULL,
name VARCHAR (255) NOT NULL,
sex CHAR(1) NOT NULL,
INDEX(name, sex) // 对字段 name、sex 创建索引
)
查看表结构:
SHOW CREATE TABLE Person
结果:
如上图所示,创建组合索引时,不设置索引名字,生成的索引默认以第一个字段来命名
查看索引是否在使用
向 book 表中插入一条数据
INSERT INTO BOOK VALUES(12,'NIHAO','NIHAO','文学','henhao',1990)
使用 EXPLAIN 语句查看索引是否有在使用
EXPLAIN SELECT * FROM book WHERE year_publication = 1990
结果:
EXPLAIN 语句输出结果的各个行的解释如下:
select_type: 表示查询中每个 select 子句的类型(简单 OR 复杂)
type:表示 MySQL 在表中找到所需行的方式,又称“访问类型”,常见类型如下:(从上至下,效果依次变好)
possible_keys :指出 MySQL 能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
key: 显示 MySQL 在查询中实际使用的索引,若没有使用索引,显示为NULL
key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
ref :表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows :表示 MySQL 根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
Extra :包含不适合在其他列中显示但十分重要的额外信息 如 using where,using index
③ 略…