- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我们有一个 [Valuations] 表,其中包含每个日期和每个基金的多个值:
-FundId
-验证日期
-值1
-值 2...
主键显然是FundId+ValDate。
我还索引了 ValDate 字段,因为我经常查询特定日期的值。
我的问题是:我是否还应该为 FundId 创建一个特定的索引,或者 MsAccess 是否足够聪明以在查询特定的 FundId 时使用主键?
最佳答案
The Primary key is obviously
FundId
+ValDate
按什么顺序?您如何 Access 您的数据?
Access 数据库引擎使用 PRIMARY KEY
作为聚集索引。如果你这样做了
主键(FundId,ValDate)
然后你会在磁盘上得到一个不同于你这样做的顺序
主键(ValDate,FundId)
要在使用 Access GUI 时显示 PK 中列的顺序(如果您没有使用 SQL DDL 创建 PRIMARY KEY
):在表设计 View 中,单击索引按钮,或在 View 菜单中启用索引。该列表将显示所有索引,对于多个字段的索引,它显示顺序,您可以更改顺序。
聚集索引中列的顺序很重要,因为它定义了表的唯一物理索引,可以说是您的 super 索引。
(ValDate, FundId)
将支持 BETWEEN
(或等效)谓词或 ValDate
上的 GROUP BY
,例如返回多个资金的日期范围查询。
(FundId, ValDate)
前者可能有利于基金特定查询……或者可能鼓励页面锁定,具体取决于值的生成方式……
您现在应该得到的印象是性能问题涉及许多变量:PK 的定义方式、键值的生成、压缩文件的频率、锁定策略(例如页面级别或行级别?)、高或低事件环境等。更不用说您针对表运行的查询的性质(例如按日期或按键?)
are you sure Access supports clustered indexes ?
当然,这里是 MSDN 上的一些重要文章:
New Features in Microsoft Jet Version 3.0“压缩数据库现在导致索引以聚集索引格式存储。虽然聚集索引在下一次压缩之前不会维护,但性能仍然得到改善。这与存储数据行的 Microsoft Jet 2.x 不同它们的输入方式。新的聚集键紧凑方法基于表的主键。输入的新数据将按时间顺序排列。”
Defragment and compact database to improve performance in Microsoft Access“如果表中存在主键,则压缩将表记录恢复为它们的主键顺序。这提供了与非维护聚集索引等效的功能,并使 Microsoft Jet 数据库引擎的预读功能更加高效......查询速度将显着提高,因为他们现在正在处理已重写到连续页面中的表中的数据。扫描顺序页面比扫描碎片页面快得多。”
How To Optimize Queries in Visual Basic“本文假设您正在使用 Microsoft Jet 数据库引擎……随着您的数据库的增长,它会变得碎片化。压缩将一个表中的所有数据写入硬盘上的连续页面,从而提高顺序扫描的性能。”
Information about query performance in an Access database“当您压缩数据库时,您可以加快查询速度。当您压缩数据库时,表的记录会重新组织,以便记录驻留在按表的主键排序的相邻数据库页面中。这提高了性能表中记录的顺序扫描,因为现在只需读取最少数量的数据库页面即可检索所需的记录。”
关于database - 微软 Access : index optimisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928447/
这个问题已经有答案了: 已关闭14 年前。 ** 重复:What's the difference between X = X++; vs X++;? ** 所以,即使我知道你永远不会在代码中真正做到
我在一本C语言的书上找到了这个例子。此代码转换输入数字基数并将其存储在数组中。 #include int main(void) { const char base_digits[16] =
尝试使用“pdf_dart”库保存 pdf 时遇到问题。 我认为问题与我从互联网下载以尝试附加到 pdf 的图像有关,但我不确定它是什么。 代码 import 'dart:io'; import 'p
我的 Apache 服务器曾经可以正常工作,但它随机开始对几乎每个目录发出 403 错误。两个目录仍然有效,我怎样才能使/srv/www/htdocs 中的所有目录正常工作? 我查看了两个可用目录的权
这些索引到 PHP 数组的方法之间有什么区别(如果有的话): $array[$index] $array["$index"] $array["{$index}"] 我对性能和功能上的差异都感兴趣。 更
我有一个简单的结构,我想为其实现 Index,但作为 Rust 的新手,我在借用检查器方面遇到了很多麻烦。我的结构非常简单,我想让它存储一个开始值和步长值,然后当被 usize 索引时它应该返回 st
我对 MarkLogic 中的 element-range-index 和 field-range-index 感到困惑。 请借助示例来解释差异。 最佳答案 这两个都是标量索引:特定类型的基于值的排序
我对 MarkLogic 中的 element-range-index 和 field-range-index 感到困惑。 请借助示例来解释差异。 最佳答案 这两个都是标量索引:特定类型的基于值的排序
所以我有一个 df,我在其中提取一个值以将其存储在另一个 df 中: import pandas as pd # Create data set d = {'foo':[100, 111, 222],
我有一个由 codeigniter 编写的网站,我已经通过 htaccess 从地址中删除了 index.php RewriteCond $1 !^(index\.php|resources|robo
谁能告诉我这两者有什么区别: ALTER TABLE x1 ADD INDEX(a); ALTER TABLE x1 ADD INDEX(b); 和 ALTER TABLE x1 ADD INDEX(
我在 Firefox 和其他浏览器上遇到嵌套 z-index 的问题,我有一个 div,z-index 为 30000,位于 label 下方> zindex 为 9000。我认为这是由 z-inde
Link to the function image编写了一个函数来查找中枢元素(起始/最低)的索引 排序和旋转数组。我解决了这个问题并正在检查 边缘情况,它甚至适用于索引为零的情况。任何人都可以 解
我正在尝试运行有关成人人口普查数据的示例代码。当我运行这段代码时: X_train, X_test, y_train, y_test = cross_validation.train_test_spl
我最近将我的 index.html 更改为 index.php - 我希望能够进行重定向以反射(reflect)这一点,然后还进行重写以强制 foo.com/index.php 成为 foo.com/
我最近将我的 index.html 更改为 index.php - 我希望能够进行重定向以反射(reflect)这一点,然后还进行重写以强制 foo.com/index.php 成为 foo.com/
我有一个用户定义的函数,如下所示:- def genre(option,option_type,*limit): option_based = rank_data.loc[rank_data[
我有两个巨大的数据框我正在合并它们,但我不想有重复的列,因此我通过减去它们来选择列: cols_to_use=df_fin.columns-df_peers.columns.difference(['
感谢您从现在开始的回答, 我是React Native的新手,我想做一个跨平台的应用所以我创建了index.js: import React from 'react'; import { Co
我知道 not_analyzed 是什么意思。简而言之,该字段不会被指定的分析器标记化。 然而,什么是 NO_NORMS 方法?我看到了文档,但请用简单的英语解释我。什么是索引时间字段和文档提升和字段
我是一名优秀的程序员,十分优秀!