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

将索引添加到MySQL中的BIGINT列是否有帮助?

邹高峻
2023-03-14
问题内容

我有一个将包含数百万个条目的表,以及一个具有BIGINT(20)每行唯一的值的列。它们不是主键,但是在某些操作期间,有数千个SELECTWHERE子句中使用此列。

问: 当条目数量增加到数百万时 ,向该列添加索引是否有帮助 ?我知道它将用于文本值,但是我不熟悉索引对INTor的作用BIGINT

SELECT可能发生数千次的示例与此类似:

`SELECT * FROM table1 WHERE my_big_number=19287319283784

问题答案:

如果表非常大,那么对未索引的值进行搜索可能会非常慢。用MySQL术语来说,这种查询最终是“表扫描”,这是一种说法,它必须按顺序对表中的每一行进行测试。显然,这不是最佳方法。

添加索引将有助于提高 读取 速度,但是您付出的代价是 写入
速度稍慢。进行优化时总是要权衡取舍,但在您的情况下,读取时间的减少将是巨大的,而写入时间的增加将是微不足道的。

请记住,将索引添加到大表可能会花费大量时间,因此请在将其应用于生产系统之前针对生产数据进行测试。该表可能会在ALTER TABLE语句期间被锁定。

与往常一样,使用EXPLAIN查询来确定其执行策略。在您的情况下,它将类似于:

EXPLAIN SELECT * FROM table1 WHERE my_big_number=19287319283784


 类似资料:
  • 对于如何向已经存在的Lucene索引添加方面,我有点困惑。 我有一个使用Lucene 3.1创建的Lucene索引(创建时没有任何方面)。 我已经查看了Lucene文档中的facet,在那里他们向您展示了如何从头创建一个带有facet的索引,也就是说,您创建一个新的Lucene对象,使用分类工具向其添加facet信息(类别),然后在Lucene索引中编写该文档(使用)这还将向分类法索引添加额外数据

  • iam在一个非常简单的表上解决一些性能问题,当使用其主键(bigint)获取数据时,这个表似乎很慢 我有这个包含 1.24 亿个条目的表: 以及一个简单的查询,它使用IN子句从另一个表中获取一些id,以从节点表中获取数据,但从这个表中获取几行只需要1小时。EXPLAIN向我展示了它不使用PRIMARY键作为索引,它只是扫描整个表。为什么?另一个表中的id和id列都来自bigint(20)类型。 查

  • 问题内容: MySQL是否自动索引外键列? 问题答案: 是的,但仅在innodb上。Innodb是当前唯一实现了外键的表格式。

  • 问题内容: 我从2005年起在MySQL论坛上找到了一个帖子,但是最近才发布。基于此,这是不可能的。但是在3-4年内会有很多变化。 我正在寻找的是一种在视图上建立索引但使被查看的表保持未建立索引的方法。索引会损害写入过程,并且该表的写入频率非常高(索引会减慢所有内容的爬取速度)。但是,缺少索引使我的查询非常缓慢。 问题答案: 我不认为MySQL支持您需要的物化视图,但无论如何在这种情况下它不会帮助

  • 问题内容: 我们的MySql表有2500万行 以下是表中的列 以上我们在c_id,c_name,s_id,l_type,域列上具有正常索引 我打算在域,l_time,l_type列上添加复合索引。因此,现在我可以删除域上的单个索引了吗? 谢谢 问题答案: 复合索引的任何前缀也将单独用作索引。因此,如果您有一个复合索引,则相当于在和上都有索引。无需分别将这些索引分开,它们将是多余的并且浪费空间。 因

  • 问题内容: 我面临以下问题,我不确定什么是最佳实践。 考虑下表(该表会变大): id PK | Giver_id FK | FK | 日期 我正在使用InnoDB,据我了解,它会自动为两个外键列创建索引。但是,我还将在需要匹配以下特定组合的情况下进行大量查询: 。 每个这样的组合在表中将是唯一的。 在这些列上添加双列索引有什么好处,还是理论上两个单独的索引足够/相同? 问题答案: 如果您有两个单列