mysql的btree索引和hash索引的区别
hash
索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像btree(b-tree)索引需要从根节点到枝节点,最后才能访问到页节点这样多次的io访问,所以
hash
索引的查询效率要远高于
btree(b-tree)
索引。
虽然
hash
索引效率高,但是
hash
索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。
(1)hash
索引仅仅能满足=,<=>,in,is
null或者is
not
null查询,不能使用范围查询。
由于
hash
索引比较的是进行
hash
运算之后的
hash
值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的
hash
算法处理之后的
hash
值的大小关系,并不能保证和hash运算前完全一样。
(2)hash
索引无法被用来避免数据的排序 *** 作。
由于
hash
索引中存放的是经过
hash
计算之后的
hash
值,而且hash值的大小关系并不一定和
hash
运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;
PRIMARY, INDEX, UNIQUE 这3种是一类\x0d\x0aPRIMARY 主键。 就是 唯一 且 不能为空。\x0d\x0aINDEX 索引,普通的\x0d\x0aUNIQUE 唯一索引。 不允许有重复。\x0d\x0aFULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。\x0d\x0a\x0d\x0a举个例子来说,比如你在为某商场做一个会员卡的系统。\x0d\x0a这个系统有一个会员表\x0d\x0a有下列字段:\x0d\x0a会员编号 INT\x0d\x0a会员姓名 VARCHAR(10)\x0d\x0a会员身份z号码 VARCHAR(18)\x0d\x0a会员电话 VARCHAR(10)\x0d\x0a会员住址 VARCHAR(50)\x0d\x0a会员备注信息 TEXT\x0d\x0a\x0d\x0a那么这个 会员编号,作为主键,使用 PRIMARY\x0d\x0a会员姓名 如果要建索引的话,那么就是普通的 INDEX\x0d\x0a会员身份z号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)\x0d\x0a会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。\x0d\x0a\x0d\x0a不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。\x0d\x0a用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。MySQL全文索引 FULLTEXT索引和like的区别 fulltext ,其实是一个索引,like语句很难用索引,所以提升了效率。fulltext ,支持多个字段检索。
搜索功能一般都用带有中文分词的开源产品,像xunsearch。
一般小项目用like就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)