第七周总结

时间: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

结果:
show_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

结果:
show_table_person
如上图所示,创建组合索引时,不设置索引名字,生成的索引默认以第一个字段来命名

查看索引是否在使用
向 book 表中插入一条数据

INSERT INTO BOOK VALUES(12,'NIHAO','NIHAO','文学','henhao',1990)

使用 EXPLAIN 语句查看索引是否有在使用

EXPLAIN SELECT * FROM book WHERE year_publication = 1990

结果:
explain book

EXPLAIN 语句输出结果的各个行的解释如下:
select_type: 表示查询中每个 select 子句的类型(简单 OR 复杂)
type:表示 MySQL 在表中找到所需行的方式,又称“访问类型”,常见类型如下:(从上至下,效果依次变好)
possible_keys :指出 MySQL 能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
key: 显示 MySQL 在查询中实际使用的索引,若没有使用索引,显示为NULL
key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
ref :表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows :表示 MySQL 根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
Extra :包含不适合在其他列中显示但十分重要的额外信息 如 using where,using index

③ 略…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值