每个人在开发过程中都无法避免使用数据库索引,那么你了解数据库索引吗?接下来我简单说一下什么是数据库索引。
1.数据索引有什么用?
其实数据库索引是为了让数据查询更高效。
二、什么是数据库索引?
聚集索引(主键索引):在数据库中,所有行都根据主键索引进行排序。
非聚集索引:是给常用字段添加索引。
联合索引:是由几个字段组成的索引,称为联合索引。
key ‘idx_age_name_sex’ (‘age ‘,’ name ‘,’ sex ‘)
联合索引遵循最左边的前缀原则。什么意思?举个例子,如果一个学生表中的工会指数如上图,那么下面的A、B、C、D、E、F哪个会跟在指数后面?
A:从学生中选择*年龄=16岁,姓名=’小张’
B:从学生中选择*名=’小张’,性别=’男’
C:从学生中选择*姓名=’小张’,性别=’男性’,年龄=18岁
D:从学生中选择* 20岁,姓名=’小张’
e :从学生中选择*年龄!=15且姓名=’小张’
f :从学生中选择*年龄=15岁,姓名!=’小张’
a遵循最左边匹配原则,年龄在最左边,所以a取索引;
b直接从名字开始,不遵循最左边匹配原则,所以不遵循索引;
c以名字开头,但在索引中有最左边的年龄,mysql会自动改成其中年龄=’18 ‘,名字=’小张’,性别=’男’,所以还是遵循最左边的匹配原则;
d这是因为age20是一个范围,范围字段会结束范围后面的索引字段的使用,所以只取年龄索引;
e这个虽然遵循最左边的匹配原则,但是不遵循索引,因为!=不要转到索引;
f这个只取年龄指标,不取姓名指标,以上原因;
第三,哪些列不取索引?
学生表中的年龄、姓名两个字段被索引
键“idx _ age”(“age”),
键“idx _ name”(“name”)
1.像这样意味着%前面不跟指数,后面跟指数
A:从学生中选择*,其中“姓名”如“国王%”
B:从学生中选择*,其中“姓名”如“%小”
甲取指数,乙不取指数
2.如果索引列用于计算,则不采用索引
a :从年龄=108岁的学生中选择*
b :从8岁=18岁的学生中选择*
甲取指数,乙不取指数
3.对索引列使用函数,不要取索引
A:从学生中选*多联(‘姓名’,’哈’)=’王哈哈’;
B:从学生中选择*其中name=concat(‘王哈’,’ ha ‘);
a不取指数,B取指数
4.使用了索引列!=不要索引,如下所示:
从学生年龄中选择*!=18
4.为什么要用B树做索引?
这可以指什么是B树
5.索引在磁盘上的存储?
聚集索引和非聚集索引的存储方式不同,那么它们是如何存储的呢?
有学生名单
创建表格“学生”(
` id`int (11)不为null auto _ incrementcomment ‘主键id ‘,
` name`varchar (50) not null default ‘ ‘注释’学生姓名’,
` age`int (11)不为null默认0注释’学生年龄’,
主键(` id `),
key `idx_age` (`age `)、
键` idx_name` (`name `)
)engine=innodb default charset=utf8 comment=’学生信息’;
表格内容如下
Id是主键索引,名称和年龄是非聚集索引
1.磁盘中聚集索引的存储
簇索引叶节点存储表中的所有行数据;
每个数据页都在不同的磁盘上;
如果要找id=5的数据,先把磁盘0读入内存,然后用二分法找到3到6之间id=5的数字,再通过指针p1找到磁盘2的地址,再把磁盘2读入内存,用二分法找到id=5的数据。
2.磁盘中非聚集索引的存储
叶节点存储的是聚集索引键,而不是表中的所有行数据,所以搜索时只能找到聚集索引键,然后通过聚集索引在表中找到数据。
如果您想查找name=肖旭,首先将磁盘0加载到内存中,然后使用二分搜索法方法查找指针p1指向的地址,然后使用指针p1指向的位置址可知道在磁盘2上面,然后通过二分查找法得知小徐id=4;
然后在根据id=4将磁盘0加载到内存中,然后通过二分查找的方法查到在指针p1所指的地址上,然后通过指针p1所指的地址可知道在磁盘2上面,然后通过id=4查找出郑正行数据,就查找出name=小徐的数据了。
旧称通检、备检或引得。组成的基本单位是索引款目。款目一般包括索引词、说明或注释语 、出处3项内容 。所有索引款目实现有序化编排。其本质特征是只揭示内容出处或文献线索 ,并不直接提供事实、资料本身。主要功能是为人们准确、迅速地获得文献资料提供线索性指引。常见的索引主要有报刊论文资料索引、文集篇目索引、语词索引、文句索引、关键词索引、专名索引、主题索引等。
索引最早出现于西方,主要是中世纪欧洲宗教著作的索引。18世纪以后西方开始有主题索引,至19世纪末,内容分析索引被广泛使用。中国的索引出现较晚。一般认为,明末傅山所编的《两汉书姓名韵》是现存最早的人名索引。清代乾嘉时期,章学诚曾力倡编纂群书综合索引。20世纪20年代,随着西方索引理论与编制技术的传入,中国现代意义上的索引编制与研究才蓬勃展开 。1930年钱亚新发表《索引和索引法》,1932年洪业发表《引得说》,标志着具有中国特色的现代索引理论、技术已迅速发展起来。20世纪50年代,计算机技术被运用于索引编制 。此后,机编索引的大量出现,使索引编制理论、技术、索引载体形式发生了深刻变革。
SQL标准中没有涉及索引,但商用关系数据库管理系统一般都支持索引机制,只是不同的关系数据库管理系统支持的索引类型不尽相同。
索引已经成为关系数据库非常重要的部分。它们被用作包含所关心数据的表指针。通过一个索引,能从表中直接找到一个特定的记录,而不必连续顺序扫描这个表,一次一个地去查找。对于大的表,索引是必要的。没有索引,要想得到一个结果要等好几个小时、好几天,而不是几秒钟。