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

MySQL索引-多少就足够了?

耿和韵
2023-03-14
问题内容

我正在尝试微调MySQL服务器,以便检查设置,分析慢速查询日志并在可能的情况下简化查询。

有时,如果我正确地建立索引就足够了,有时却不行。我读过某个地方(如果这是愚蠢的话,请纠正我的意思),比我需要的索引更多,可以达到相同的效果,就像我没有任何索引一样。

多少个索引足够?您可以说这取决于数百个因素,但是我很好奇如何清理自己mysql-slow.log的内容以减轻服务器负载。

此外,我看到了一些“有趣的”日志条目,如下所示:

# Query_time: 0  Lock_time: 0  Rows_sent: 22  Rows_examined: 44
SELECT * FROM `categories` ORDER BY `orderid` ASC;

该表正好包含22行,索引设置为orderid。为什么此查询最终显示在日志中?如果只包含22行,为什么还要检查44行?


问题答案:

索引编制的数量和要做的过多事情取决于很多因素。在诸如“类别”表之类的小型表上,您通常不需要或不需要索引,这实际上会损害性能。原因是读取索引需要I /
O(即时间),然后检索与匹配的行关联的记录需要更多的I / O和时间。一个例外是仅查询索引中包含的列。

在您的示例中,您只检索22列的所有列,而仅进行表扫描并对它们进行排序而不是使用索引可能会更快。优化器可能正在/应该这样做并且忽略了索引。如果是这种情况,那么索引只是占用空间而没有任何好处。如果您经常访问“类别”表,则可能需要考虑将其固定到内存中,以便db服务器保持其可访问性,而不必一直访问磁盘。

添加索引时,您需要平衡磁盘空间,查询性能以及更新和插入表的性能。与每天有数百万次更新的表相比,您可以在静态且不变不大的表上获得更多索引。那时您将开始感觉到索引维护的影响。但是,在您的环境中可接受的是并且只能由您和您的组织确定。

在进行分析时,请确保生成/更新表和索引统计信息,以便可以确保准确的计算。



 类似资料:
  • 问题内容: 什么是当它的一些准则 不是 必要的检查空? 到目前为止,我一直在处理的许多继承代码都带有null检查广告。对琐碎的函数进行空检查,对声明非空返回的API调用进行空检查,等等。在某些情况下,空检查是合理的,但在许多地方,空值不是合理的期望。 我听到过许多参数,从“您不能信任其他代码”到“始终防御性地编程”再到“直到语言保证我没有非空值,我总是要检查”。在某种程度上,我当然同意其中的许多原

  • 问题内容: 我花一些时间来优化当前数据库。 我正在专门查看索引。 有几个问题: 索引太多了吗? 索引将加速什么? 索引会减慢什么? 什么时候添加索引是个好主意? 什么时候添加索引是个坏主意? 多个索引与多列索引的优缺点 问题答案: 索引将加速什么? 数据检索-SELECT语句。 索引会减慢什么? 数据操作-INSERT,UPDATE,DELETE语句。 什么时候添加索引是个好主意? 如果您想获得更

  • 本文向大家介绍mysql中一个表最多可建立多少索引相关面试题,主要包含被问及mysql中一个表最多可建立多少索引时的应答技巧和注意事项,需要的朋友参考一下 MyISAM 存储引擎的话,最多64个索引。 索引中字段字节总和不得大于 1000 bytes Innodb 则没有什么具体的限制。  

  • 问题内容: 我在数据库中创建2个表: 和: 当我在沼泽中运行查询时,出现此错误: SQL查询: 说:文档 #1822-无法添加外键约束。参照表“药物”中约束“ fk_med_pharmacy_medication1”的缺少索引 这些表已经存在,但是我更改了一个字段。 问题答案: 外索引中引用的列必须被索引。您需要在添加索引。实际上,这可能应该是表的主键。

  • 我不想告诉每个布局都适合容器,而是想调整每个容器的大小,以完美地适应它的子画布。换句话说,我需要一种方法来询问Cytoscape画布的每个实例,“0缩放时您的宽度和高度是多少”,或者“在每个方向上需要多少像素才能完全绘制”,然后适当地调整每个容器的大小。 Cytoscape确实提供了获取画布的和的方法,但它们最终是实际的尺寸(可能不适合容器),而不是“想要的”/需要的尺寸。 我突然想到,我可以想出

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是