据我了解,所有表都有一个指针列表,这些指针显示了数据所在的位置。对于拆分数据库,在运行查询之前,将使用数据库指针来检索表。
与SQL Server是否一样?如果没有,在数据检索过程中有什么区别?
答案 0 :(得分:3)
其工作原理实际上是相同的。
唯一的主要区别是:
在访问SQL Server后端表时,只有符合您条件的记录才通过网络连接从服务器中拉出。
在访问Access“文件”后端时,只有符合您条件的记录才通过网络连接从文件中拉出–但是,只有在索引可用并且可以通过索引进行时,才通过网络“有限”地拉动记录。使用。如果无法使用索引(或没有索引),则本地数据库引擎(JET或ACE)会将整个表拉入网络管道。
因此,在某些情况下,如果查询条件无法使用索引(或没有索引),则会发生全表扫描,因此整个表将通过网络被拉到访问客户端。
因此,并非在所有情况下,整个表都会被客户端删除。
对于sql server,如果无法使用索引(或没有索引),则将进行全表扫描。但是,此全表扫描发生在服务器端,因此在此表扫描期间没有网络流量发生。因此,即使没有索引,也没有索引,只有符合您条件的记录才会从网络管道中拉到本地客户端。没有索引,SQL Server硬盘驱动器可能会发疯或旋转,但是在此过程中不会发生网络流量。
与普遍的看法相反,即使使用基于“文件”的后端(没有SQL Server,而只是位于该服务器上共享文件夹上的平面Jane访问文件),Access也会仅将符合条件的记录拉到网络管道。但是,只有在Access可以使用索引作为条件的情况下,这种优化才会发生。
因此,如果表中有500,000张发票,请使用:
从tblInvoices中选择*,其中InvoiceNumber = 12336
如果InvoiceNumber列上有索引,则即使没有任何类型的服务器,Access也会只拉一行。对于SQL Server或Access,就是这种情况。
显着的区别是,如果您没有SQL Server的索引,则网络流量仍将是沿着网络管道传输到客户端的唯一记录。但是,如果在SQL Server上没有索引,则硬盘驱动器和SQL Server将非常努力地工作并进行全表扫描。
如访问后端(文件)所述,如果没有索引可用,则将进行全表扫描,并且所有记录都将通过网络管道到达客户端。
这意味着SQL Server更容忍“差劲”的设计,没有索引的查询或不能使用索引的查询。
因此对于Access后端,整个表将沿着网络管道发送的可能性更大-特别是在无法使用索引或无法将索引用于给定条件的情况下。
当然如何进行更新是另一回事和不同的问题。您的问题仅限于数据检索。
编辑: 阅读以下有关网络和访问的文章: