当前位置: 首页 > 面试题库 >

小表上没有索引?

郎雅昶
2023-03-14
问题内容

“我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源。”
(唐纳德·努斯)。我的SQL表不太可能每个都包含几千行(那是大行!)。SQL
Server数据库引擎优化顾问认为无关紧要的数据量。因此,我什至不考虑在这些表上放置显式索引。正确的?


问题答案:

索引的价值在于加快读取速度。例如,如果您基于date列中的日期范围执行大量SELECT,则在该列上放置索引是有意义的。当然,通常,您会以任何重要的频率在要加入的任何列上添加索引。效率的提高还与典型记录集的大小与记录数的比率有关(即,获取20/2000条记录比索引获得90/100条记录带来的收益更多)。在未索引列上的查找本质上是线性搜索。

索引的开销来自写入,因为每个INSERT还需要对每个列索引进行内部插入。

因此,答案完全取决于您的应用程序-
如果它是一个动态网站,其中读取次数可以是写入次数的100倍或1000倍,并且您根据数据列进行频繁的,完全不同的查找,则索引编制可能会很有用。但是,如果写的数量大大超过读的数量,那么您的调优应该专注于加快那些查询的速度。

无论是在JOIN /
WHERE列上使用索引还是不使用索引,都可以花费很少的时间来确定和基准化您的应用程序中最频繁的操作,我建议您这样做。监视生产应用程序并识别最昂贵,最频繁的查询,并将优化工作重点放在这两组查询的交集上也很聪明(这可能意味着索引或其他完全不同的查询,例如分配更多或更少的内存用于查询或加入缓存)。



 类似资料:
  • 我正在尝试创建一个仪表板与可拖动和可调整大小的面板与PrimeFaces。当我将可调整大小添加到面板时,它就不起作用了。如果我在仪表板外使用它,它的工作很好。你能不能有一个请帮助我如何添加大小到面板上的仪表板。

  • 问题内容: 我有一个应用程序,该应用程序在打开时会加载一个列表视图,但是我遇到了数组索引超出界限异常的情况,却没有任何问题的根源。它正在尝试在某个地方访问index = -1,但我不知道在哪里。 该应用程序从数据库加载家庭作业信息,将它们放入ArrayList中的单独的家庭作业对象中,然后从那里将其加载到ListView中。我真的不知道异常的来源,我已经检查了所有代码。列表中只有1个作业,但是该应

  • 问题内容: 我有很多小文本(说大约500个单词)和两个数据库,每个数据库大约有10.000个条目(关键字)。 现在,我想处理每个文本,并找出文本中包含哪些关键字(保存在2个数据库中的关键字)。 你们中的某人是否有有效地做到这一点的好方法? 我想对每个文本进行处理并对其进行索引(也许使用lucene),然后再针对它搜索数据库,但是我真的不知道lucene是否是正确的工具。 问题答案: Lucene正

  • 我创建了一个带有主键(UsersID、AccountsID)的帐户/用户表,如下所示。我是否应该为Users表添加索引?

  • 我最近读到了这篇关于为一组已知的键生成一个最小完美哈希表的文章:Throw away the Keys:Easy,Minimal Perfect Hashing。 本文似乎假设您需要一个中间表。如果我们假设键的集合很小(即<64),那么有没有其他更简单的方法来生成这样的函数。 在我的例子中,我希望将一组线程ID:s映射到数组中的唯一数据块。线程在哈希函数生成之前启动,并且在程序运行期间保持不变。线

  • 我开发了一款定制手表脸(AndroidWear 5),在测试过程中效果极佳。上传到Google Play并下载测试,但它不会出现在Android Wear应用程序中,也不会出现在配对手表本身(运行Android Wear 5.0.1)! 我上传了移动apk(类似于我的其他Android Wear应用程序),并且对移动和Wear都有相同的权限。 有人遇到过类似的问题吗?如果有人想测试一下,这是手表的