【问题标题】:How to index database?如何索引数据库?
【发布时间】:2015-12-01 23:19:56
【问题描述】:

这让我很生气 - 每个人都说它是什么,但没有人指着指南或教授基础知识。

  1. 是从一开始就做得更好,还是如果您的加载时间越来越长,您是否可以轻松地将其编入索引?

  2. 有没有人为非数据库专业人士找到任何好的起点? (我是指索引起点,不用担心,我知道数据库的基础知识)主要规则,良好实践等。

我不是来要求你写一个庞大的教程,但如果你真的,真的很无聊 - 去吧。 :)

如果知道这一点很重要,我正在使用 Wordpress。是的,我知道 WP 使用非常基本的索引,但如果从一开始就很好,我看不出有什么理由不这样做。


  1. 几乎没有关系,但我也没有在网上找到答案。我可以猜到答案,但我不能 100% 确定 - 使用相同键存储数据的更有效方法是:在数组或单独的行中(单独的 ID 但相同的键)?每个帖子通常最多有 20 个项目,未来的帖子数量可能会达到数千个。 哪个是更好的解决方案?

不同的行、ID 和值但相同的键

id | key |values|
--------------------
25 | Bob | 3455 |
--------------------
24 | Bob | 1654 |
--------------------
23 | Bob | 8432 |

同一行,id & key BUT 值是序列化数组

id | key |      values      |
------------------------------
23 | Bob | serialized array |
------------------------------

【问题讨论】:

  • 通常索引包含在 DDL(数据定义语言)中; IOW,当决定数据库结构时。不过,您可以在事后更改表并稍后创建索引。
  • 您的问题过于宽泛,但这是帮助我入门的指南:Use the Index, Luke!

标签: mysql database-indexes


【解决方案1】:

如果您想要一个快速的经验法则,请为您将用于查找行的表中的任何列编制索引。比如我可能有一张表如下:

id| Name| date     |
--------------------
0 | Bob | 11.12.16 |
--------------------
1 | John| 15.12.16 |
--------------------
2 | Tim | 19.12.16 |

很明显,您的 ID 是您的主索引,但假设您有一个页面可以按 DATE 对整个表进行排序,那么您可以将日期添加为索引。

基本上,索引可以让引擎更快地查找特定记录或按特定列对它们进行排序。他们做得更多,但当我为自己设计网站或为工作中的办公室设计小工具时,我通常只是这样做。

大型企业表可以有数千个索引,表之间的关系甚至更多,但通常对于我们这些小农来说,我说的应该足够了。

【讨论】:

  • 检查一下,我的问题也做了一个表格。
  • 抱歉重复评论...要回答您的第三个问题,我个人会为每个数据字段创建一个新行,在一些不太常见的情况下,我已经看到代码会动态创建一个表每个键,比如说 bob 寄存器,他都有自己的表,其中包含他所有的数千个条目,依此类推。底线:您可能应该将每个数据字段存储在一个新行中,并将其指向 bob 等...
  • 另外,要详细说明为什么序列化数据可能不是一个好主意,如果您只寻找一个数据字段,将其序列化将迫使您检索和解析整个数组找到一个字段。这会增加很多开销,并延长你的代码。
  • 好的。我问这个是因为我有特定的位置,而且我确定我只需要整个数组,因为其中的数据总是一起使用。我担心这将是填充最多的表,我担心太多的行会花费太多的空间+会减慢查询速度。使用来自单个帖子(大约 20 个)的所有其他数据 + 所有这些具有相同键(大约 20 个)的所有数据,每个帖子将产生 40 行。有 50 000 个帖子是 200 万 行,但如果我将其存储为序列化数组,它将是 100 万。我的想法是否正确?
  • 听起来应该对 dB 结构进行一些其他重新思考和优化,但您也可以研究压缩和归档 dB 的旧部分,这样您就永远不会得到200 万行。
【解决方案2】:

你问的是一个非常复杂的问题。但是 tl;博士;数据库索引是一种数据结构,它以额外的写入和存储空间为代价来提高对数据库表的数据检索操作的速度来维护索引数据结构。

这里的完整答案中已经提供了更详细的信息: How does database indexing work?

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2012-03-12
    • 2010-10-15
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2010-09-05
    • 2011-07-11
    相关资源
    最近更新 更多