先看一下数据表字段内容
id默认主键自增 拥有主键索引
测试 查询单条 id
结果在毫秒级响应
测试 查询名称 name # 没有添加索引
同样的sql运行了3次
结果都在10秒以上
接下来给 name字段添加索引
再此普及一下 索引知识
#1 索引种类:
1. Fulltext 全文本搜索索引:用于搜索长篇文章。
2. Unique 唯一索引:
主键索引:primary key :加速查找+约束(不为空且唯一)
唯一索引:unique:加速查找+约束 (唯一)
3. 联合索引:
-primary key(id,name):联合主键索引
-unique(id,name):联合唯一索引
-index(id,name):联合普通索引
4. Normal 普通索引:加快搜索。
5. Spatial 空间索引。
#2 索引的两大类型hash与btree
#我们可以在创建上述索引的时候,为其指定索引类型,分两类
hash类型的索引:查询单条快,范围查询慢
btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)
1)索引方法 btree 可以用于“ >、 < 、=”查询 ,如果查id=1000的数据 建立索引后 二分查找最多13次就可 以查出相应的数据;
2)hash 不能做order by排序 不能做 用like模糊查询。
由此可知 name 添加的普通索引 Normal 索引方法 选用的 btree
结果在 毫秒级响应
*
测试 idcard 没加索引
响应时间和上面一样 太长
因为idcard 这种一般存储 的值不会重复和相同 所以用 Unique 唯一索引
一样 毫秒级的响应速度
*
最后说一下 Fulltext 索引
全文索引
在一般情况下,模糊查询都是通过 like 的方式进行查询。但是,对于海量数据,这并不是一个好办法,在 like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询,这在数据量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情,所以 like 进行模糊匹配性能很差。
这种情况下,需要考虑使用全文搜索的方式进行优化。全文搜索在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引在 MySQL 5.6 版本之后支持 InnoDB,而之前的版本只支持 MyISAM 表。
全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。目前只有char、varchar,text 列上可以创建全文索引。
小技巧:
在数据量较大时候,先将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。