【问题标题】:Comparison of MariaDB IndexesMariaDB 索引比较
【发布时间】:2020-04-05 02:22:43
【问题描述】:

我正在使用HeidiSQL 并且我开始研究索引,因为有一个特别是运行查询的表明显更长,因为它填充了 1,249,848 行。几乎每个表(除了合理的例外)都有一个主键;这很简单。我看到了Socratica's SQL Index 视频,对于一般 SQL 经验有限的人来说,这是一个很棒的手表,但不幸的是她没有说明应该使用哪种类型的索引。

HeidiSQL 允许创建 primarykeyuniquefulltextspatial 索引,至少在 MariaDB 中是这样,而且我在过去几年一直专门使用 MariaDB。我计划添加几个索引的表用于我的蜘蛛日志表的dateengine 列。我将DATETIMEVARCHAR() 分别用于这些列,因此我知道要使用哪种类型的索引,尽管我非常感谢将索引与建议进行比较。该手册涵盖了索引所做的什么,但似乎并没有完全涵盖它们与其他索引相比最适合哪些数据集的对比。

【问题讨论】:

标签: mysql indexing mariadb


【解决方案1】:

每张表只能有一个 primary 键,并且您应该始终定义一个。表数据(在磁盘上)将以搜索主键非常快的方式存储。 (叫Clustered Index

在大多数应用程序中,主键是auto_increment surrogate key
但您也可以选择natural primary key,这是您的数据中已经存在的唯一标识符,例如序列号、MAC 地址、社会保险号……

在主键中搜索是检索数据的最快方法,但只能有一个。

在谈论索引以加速搜索时,人们通常指的是简单的KEYs,也称为“辅助键”。

对于许多用例,创建一个包含多个属性的“covering index”很有用。
KEY(lastname, surname) 加快查询速度,例如
WHERE lastname="Anderson" AND firstname="Thomas"

WHERE lastname="Anderson"
但不是
WHERE firstname="Thomas"

了解您的应用程序执行最多的查询并为这些查询设计索引非常重要:

不是每个查询都能有效地使用索引,也不是所有的索引都有用,在高写入负载下,最好有几个好的索引而不是很多不好的索引。

索引的写入成本很高:一行上的每次更新也意味着对每个单个索引的更新!


其他类型比较特殊:

unique 键确保只有一行可以保存相同的属性值。这通常用于强制执行诸如“帐户的电子邮件地址必须是唯一的”/“每封电子邮件只有一个帐户”之类的业务规则。

fulltext只能应用于TEXT列,实际上是一个嵌入数据库的迷你搜索引擎。您可以使用ANDOR 条件、带有特殊MATCH 运算符的通配符进行文本搜索。

spatial 用于坐标系/几何,不能用于其他任何东西。

【讨论】:

  • 让它工作,我的统计页面不再需要 20 秒来加载。我很欣赏这里的细节,我绝对肯定在接下来的几年里我会越来越多地使用索引。 :-)
猜你喜欢
  • 2020-04-15
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2010-12-04
  • 2017-02-20
  • 2012-02-01
  • 1970-01-01
相关资源
最近更新 更多