[quote]
数据库表的信息是存在在文件中的,每个文件中有很多记录,你添加一条记录,文件中就会多一条记录。
如果要查找一条记录怎么查找呢?你会打开文件读取文件内容,然后看看是不是你要的记录,查找任何记录都要从前向后去比较。就像一个房间有很多人,你知道要找的人在这个房间,但是具体在什么位置你不知道,你只有一个一个看,直到找到你要找的人,运气好的话,第一个人就是你要找的,运气不好,最后一个人才是你要找的。效率低不低?
如何解决这个问题呢?如果能记录每条记录的位置信息是不是就可以很快找到呢?例如房间中有很多人,你可以制作一个座位图,这样要找哪个人,先在图上找出这个人在什么地方,然后直接到相应的位置找就可以找到。这就是索引。如果座位图上用的是名字和位置信息,要是根据名字可以很快找到这个人,要根据编号就没有办法查找了。所以索引是根据记录的某个属性(可以是多个)来建立的。
索引为什么能提高效率呢?因为查找的时候,可以直接定位,不用遍历,所以查找会非常快。当然如果你要查询某个表的所有记录对速度不会用太大影响。在表连接的时候是如何提交效率的呢?遍历第一个表时候,对于每一条记录,都会根据连接字段去查找关联表,如果能直接定位就可以直接读取,如果不能直接定位,在需要遍历第二张表,表中有多少记录,就要遍历多少次。所以如果两张表分别有3000条记录,有索引(在关联字段上)需要找3000次,如果没有索引需要找3000*3000/2次,所以效率差别会非常大。
当然也不是说索引越多越好,因为建立索引是需要成本的,包括需要存储索引列与记录的对应关系,另外在对数据进行增、删、改的时候都要对索引进行维护,会影响效率。
[/quote]
数据库表的信息是存在在文件中的,每个文件中有很多记录,你添加一条记录,文件中就会多一条记录。
如果要查找一条记录怎么查找呢?你会打开文件读取文件内容,然后看看是不是你要的记录,查找任何记录都要从前向后去比较。就像一个房间有很多人,你知道要找的人在这个房间,但是具体在什么位置你不知道,你只有一个一个看,直到找到你要找的人,运气好的话,第一个人就是你要找的,运气不好,最后一个人才是你要找的。效率低不低?
如何解决这个问题呢?如果能记录每条记录的位置信息是不是就可以很快找到呢?例如房间中有很多人,你可以制作一个座位图,这样要找哪个人,先在图上找出这个人在什么地方,然后直接到相应的位置找就可以找到。这就是索引。如果座位图上用的是名字和位置信息,要是根据名字可以很快找到这个人,要根据编号就没有办法查找了。所以索引是根据记录的某个属性(可以是多个)来建立的。
索引为什么能提高效率呢?因为查找的时候,可以直接定位,不用遍历,所以查找会非常快。当然如果你要查询某个表的所有记录对速度不会用太大影响。在表连接的时候是如何提交效率的呢?遍历第一个表时候,对于每一条记录,都会根据连接字段去查找关联表,如果能直接定位就可以直接读取,如果不能直接定位,在需要遍历第二张表,表中有多少记录,就要遍历多少次。所以如果两张表分别有3000条记录,有索引(在关联字段上)需要找3000次,如果没有索引需要找3000*3000/2次,所以效率差别会非常大。
当然也不是说索引越多越好,因为建立索引是需要成本的,包括需要存储索引列与记录的对应关系,另外在对数据进行增、删、改的时候都要对索引进行维护,会影响效率。
[/quote]