我阅读并观看了很多博客和视频,所有人都在讨论 -
但没有一篇文章解释过这个 -
是否将值(列值)缓存在内存中? 请用你的想法启发我。
谢谢。
答案 0 :(得分:1)
它使得它更快,因为索引为数据添加了结构。
考虑一个电话簿,其中所有名称都没有按特定顺序存储,查找特定人员编号非常耗时,但如果按字母顺序存储名称,则更容易,更快捷。那将是数据库中的聚簇索引。
书中的索引页面将是一个非聚集索引,我会在其中找到一个特定页面,其中包含我首先在索引页面上查找的内容。
答案 1 :(得分:1)
数据库在光盘上的物理块中存储表的行。让我们以一个存储客户信息的公司的示例数据库为例 为新客户添加行时,数据库会将此信息存储在其中一个可用块中,并为其分配一个rowId。
当您搜索客户时,如果数据库知道rowId,它可以快速找到客户记录并显示它。这是因为rowId指向存储此特定客户信息的物理块。
但是当我们搜索客户时,我们会根据某个字段(如姓氏)来搜索。这是索引的来源。索引是一个有组织的结构,提供从字段值到rowId的快速映射。
当向表中添加新行时,数据库会记录rowId并使用字段值(例如姓氏)到rowId的映射更新索引。其中一个常用索引具有树结构。
如果没有索引,数据库必须对所有行进行线性搜索(全表扫描)才能找到特定的姓氏。
假设客户的姓氏以M
开头。这导致搜索到索引的M
部分。与表格的线性搜索相比,这很快将搜索范围缩小到整体的1/26部分,因为我们已经消除了姓氏以其他任何25个字母开头的索引部分。
这同样适用于下一步搜索。假设客户姓氏的第二个字母是o
。这进一步将字段缩小到以M
开头的姓氏的1/26。继续,在几个步骤中,索引会快速将姓氏Moore
映射到客户的rowId。
可以通过添加另一个字段来扩展相同的想法,比如说索引的名字。如果有100万客户,通过遍历索引树结构的几个步骤,数据库可以快速找到rowId并避免搜索百万行。