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

为什么MySQL不使用任何这些可能的密钥?

桓兴腾
2023-03-14
问题内容

我有以下查询:

SELECT t.id
FROM account_transaction t
JOIN transaction_code tc ON t.transaction_code_id = tc.id
JOIN account a ON t.account_number = a.account_number
GROUP BY tc.id

当我这样做时EXPLAIN,第一行显示的内容包括:

table: t
type: ALL
possible_keys: account_id,transaction_code_id,account_transaction_transaction_code_id,account_transaction_account_number
key: NULL
rows: 465663

为什么键为NULL?


问题答案:

可能是因为统计信息已损坏,或者是因为它知道两个表之间始终具有1:1的比率。

您可以强制在查询中使用索引,并查看这样做是否可以加快速度。如果是这样,请尝试运行ANALYZE TABLE以确保统计信息是最新的。

通过指定USE INDEX(index_list),可以告诉MySQL仅使用命名索引之一来查找表中的行。备用语法IGNORE
INDEX(index_list)可用于告诉MySQL不要使用某些特定的一个或多个索引。如果EXPLAIN显示MySQL使用的索引可能不正确,则这些提示很有用。

您还可以使用FORCE INDEX,其作用与USE
INDEX(index_list)相似,但是要假定表扫描非常昂贵。换句话说,仅当无法使用给定索引之一在表中查找行时才使用表扫描。

每个提示都需要索引名称,而不是列名称。主键的名称为PRIMARY。若要查看表的索引名称,请使用SHOW INDEX。

从http://dev.mysql.com/doc/refman/5.1/en/index-
hints.html



 类似资料:
  • 有25种类型的空白。在下面的代码中显示,25种类型中有4种在Java中不被视为空白。为什么? 参考-https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/character.html#IsWhitespace(char)

  • 问题内容: 对于Java的处理方式以及涉及到的数字和其他类型的数字,我有些困惑。例如: 输出(也许您应该先猜测一下): 这不能编译是可以预料的,是不同的对象。 令我有些惊讶的是,默认情况下9是an ,并且1)甚至没有编译。请注意,您不能将放入期望使用的方法中,但是在这里它们是相等的。 由于两个相同的原因,这令人惊讶,但似乎更糟。 不足为奇,因为自动装箱到和。 不足为奇,因为不同类中的对象不应该是。

  • 为了区分(a)任何值、(b)显式null和(c)无值的情况,我使用和注释。 这在Spring Boot 2.1.0/Jackson 2.9.7中非常适用。 目前(更新后)似乎像一样处理。它呈现,尽管该字段是用注释的。在Spring Boot 2.5.5/Jackson 2.12.5中,它呈现:

  • 问题内容: 大多数SQL专家会说,不能在同一级别的select中重用别名;通常要解决此问题,使用CTE;或者将查询包装为子查询,以便可以引用别名。但是,如果在select自身的子查询中引用了别名,则mySQL似乎允许这种情况。因此,从技术上讲,它不在同一水平上。 演示: 以上两个查询均有效。他们工作。(或在使其看起来像工作时做得非常好) 尽管事实并非如此:正如人们所期望的那样。 因此,这里的问题有

  • 我理解这是指当前对象。所以,与其使用 为什么我不能使用 请参考下面的例子,并在最后看到最后两个评论。

  • 我编写这段python代码是为了创建RSA私钥和公钥。然后从私钥创建一个JWK,然后用该JWK对声明进行签名。 当我运行它时,它在签名步骤失败: 导致此错误的原因是什么?我如何才能使其正常工作??