Mind Map generated by NB MindMap plugin   
> __version__=`1.1`
---

# 测试开发

## 非技术
> leftSide=`true`


## Python

## SQL

### 索引
> collapsed=`true`


#### 概念：在关系型数据库中，索引是一种单独的、物理的对数据库表中一列或多列的值进行预排序的数据存储结构（相当于图书的目录）；<br/>通过索引，可以让数据库系统不必扫描整表，而直接定位到符合条件的标记，大大加快了查询速度
> align=`left`


#### 普通索引：最基本的索引，没有任何限制，直接创建<br/>CREATE INDEX index\_name ON table\(column\(length\)\)
> align=`left`


#### 唯一索引:相比普通索引，唯一索引不允许具有索引值相同的行（从而禁止重复的索引或键值），必须是唯一的，但允许有空值<br/>CREATE UNIQUE index\_name ON table\(coulun\(length\)\)<br/>https://www\.cnblogs\.com/wangchunli\-blogs/p/10416046\.html
> align=`left`


#### 主键索引：一个表只能有一个主键，不允许有空值，一般在创建表时创建主键索引
- NOTE
<pre>CREATE TABLE ‘table’(
    'id' INT(11) NOT NULL AUTO_INCREMENT,
    'title' CHAR(255) NOT NULL,
    PRIMARY KEY('id')
)</pre>

#### 组合索引：在表的多个字段上创建索引，只有在查询条件中使用了创建索引的第一个字段，索引才会被使用。使用组合索引时遵循最左前缀集合。<br/>ALTER TABLE 'table' ADD INDEX name\_city\_age\(name, city, age\)
> align=`left`


#### 全文索引：主要用在查询文本（text）中的关键字，fulltext索引跟其它索引大不相同，它更像是一个搜索引擎，而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用，而不是一般的where语句加like。它可以在create table，alter table ，create index使用，不过目前只有char、varchar，text 列上可以创建全文索引。值得一提的是，在数据量较大时候，现将数据放入一个没有全局索引的表中，然后再用CREATE index创建fulltext索引，要比先为一张表建立fulltext然后再将数据写入的速度快很多

### SQL优化
> align=`left`,collapsed=`true`


#### 优化原理：https://www\.jianshu\.com/p/d7665192aaaf

#### 查询时尽量避免使用 SELECT \* FROM table语句

#### 不使用 NULL 字段

#### 合理创建索引

#### 为字段选择合适的数据类型

#### 分库分表，根据分库分表的公式去查找任意一个id所在的表

#### 查询方式优化
> collapsed=`true`


##### 1、对查询进行优化，尽量避免全表扫描，首先在 WHERE 或 ORDER BY涉及的列上建立索引

##### 2、尽量避免在 WHERE 子句中使用 \! 或 \<\> 操作符，否则导致引擎放弃使用索引而进行全表扫描

##### 3、尽量避免在 WHERE 子句中使用 or 来连接条件，否则导致引擎放弃使用索引而进行全表扫描<br/>SELECT \* FROM test WHERE id = 10 OR id = 20<br/>\-\-\><br/>SELECT \* FROM test WHERE id = 10 UNION ALL SELECT \* FROM test WHERE id = 20
> align=`left`


##### 4、尽量避免在 WHERE 子句中使用 IN 或 NOT IN，否则导致引擎放弃使用索引而进行全表扫描<br/>SELECT \* FROM test WHERE id IN \(1, 2, 3\)<br/>\-\-\> \(如果是连续值\)<br/>SELECT × FROM test WHERE id BETTWEEN 1 and 3
> align=`left`


##### 5、尽量避免在 WHERE 子句中使用 LIKE “”"%xx%"，否则导致引擎放弃使用索引而进行全表扫描

##### 6、在使用索引字段作为条件时，如果该索引是复合索引，那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引，<br/>否则该索引将不会被使用，并且应尽可能的让字段顺序与索引顺序相一致。
> align=`left`


##### 7、尽量避免在 WHERE 子句中对字段进行 NULL 值判断，否则导致引擎放弃使用索引而进行全表扫描<br/>SELECT \* FROM test WHERE id IS NULL<br/>\-\-\><br/>SELECT \* FROM test WHERE id = 0
> align=`left`


### char 和 varchar 的区别
> collapsed=`true`


#### 存储引擎
> align=`left`,collapsed=`true`


##### 概念：在关系型数据中，数据的存储形式是以表的形势进行存储的，所以存储引擎也称为表类型（即存储和操作表的类型）<br/>数据类型跟数据库的存储引擎存在着很大的关系

##### 分类
> collapsed=`true`


###### InnoDB
> collapsed=`true`


####### MySQL5\.5 版本以后默认支持的存储引擎，支持事务和行级锁定，比 MyISAM 的处理速度稍慢

###### MyISAM
> collapsed=`true`


####### 高速引擎，拥有较高的插入和查询速度，但不支持事务

###### CSV
> collapsed=`true`


####### CSV 存储引擎是基于 CSV 格式文件的存储引擎

###### \.\.\.

#### char
> collapsed=`true`


##### 用来存储字符串，属于固定长度的字符类型

#### varchar
> collapsed=`true`


##### 用来存储字符串，属于可变长的字符类型

#### 在不同存储引擎下 char 和 varchar 的优缺点
> collapsed=`true`


##### InnoDB
> collapsed=`true`


###### 建议使用 VARCHAR 类型，对于 InnoDB 数据表，内部的行存储格式没有区分固定长度和可变长度列

##### MyISAM

##### MEMORY

## 网络
> leftSide=`true`


## 性能
> leftSide=`true`


## 安全
> leftSide=`true`


## Git 

## App

## Linux 

## 接口自动化
