哪些列通常能够创建好的索引?
作为“什么是索引,以及如何使用它们来优化数据库中的查询?”的后续操作? 我在哪里试图了解索引,哪些列是良好的索引候选者? 特别是对于MS SQL数据库?
一些谷歌搜索后,我所读的一切表明,通常增加和独特的列会创建一个好的索引(像MySQL的auto_increment之类的东西),我理解这一点,但我使用的是MS SQL,而且我正在使用GUID作为主键,该索引不会使GUID列受益...
索引可以在查询优化中发挥重要作用,并从表中快速搜索结果。 因此,选择要索引的列是最重要的一步。 有两个主要的地方我们可以考虑索引:WHERE子句中引用的列和JOIN子句中使用的列。 简而言之,应对这些列进行索引,以便搜索特定记录。 假设,我们有一个名为买家的表,其中SELECT查询使用如下所示的索引:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
由于在SELECT部分中引用了“buyer_id”,因此MySQL不会使用它来限制所选行。 因此,没有很大的需要索引它。 下面是另一个与以上不同的例子:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
根据上述查询first_name,last_name列可以按照位于WHERE子句中的顺序进行索引。 另外来自国家/地区表的country_id字段可用于索引,因为它位于JOIN子句中。 因此,可以在WHERE子句或JOIN子句的每个字段上考虑索引。
以下列表还提供了一些提示,在打算在表中创建索引时应始终记住:
更新(15年2月23日):
任何索引(好/坏)都会增加插入和更新时间。
根据您的索引(索引和类型的数量),搜索结果。 如果你的搜索时间会因为索引而增加,那么这就是糟糕的索引。
可能在任何一本书中,“索引页”都可能有章节起始页,主题页码开始,子主题页也开始。 索引页面中的一些说明有助于更详细的索引,但可能会让您感到困惑或者吓到你。 索引也有记忆。
指数选择应该明智。 请记住,并非所有列都需要索引。
有些人在这里回答了类似的问题:你怎么知道一个好的指数是什么?
基本上,这取决于你将如何查询你的数据。 您需要一个能够快速识别与查询相关的数据集的小部分子集的索引。 如果你从不用datestamp查询,你不需要索引,即使它大多是唯一的。 如果你所做的只是获得某个日期范围内发生的事件,那么你肯定会想要一个事件。 在大多数情况下,性别指数是毫无意义的 - 但如果你所做的只是获得有关所有男性的统计数据,并且分开了解所有女性的数据,则可能值得创建一个。 弄清楚你的查询模式将是什么,访问哪个参数会最大限度地缩小搜索空间,这是你最好的索引。
还要考虑你所做的索引类型 - B树对于大多数情况都很好,并且允许范围查询,但是散列索引可以让你直接点(但不允许范围)。 其他类型的指标有其他优点和缺点。
祝你好运!
这一切都取决于你期望询问表格的问题。 如果您要求X列中具有特定值的所有行,则如果索引无法使用,则必须执行全表扫描。
在以下情况下,索引将很有用:
在以下情况下它们将不会有用:
主键列通常适用于索引,因为它们是唯一的,并且通常用于查找行。
链接地址: http://www.djcxy.com/p/39369.html