【问题标题】:When will this MySQL table become slow这个 MySQL 表什么时候会变慢
【发布时间】:2011-01-06 00:17:02
【问题描述】:

下表为:

  1. 只搜索[简单选择],不删除/插入/加入其他人等。
  2. 列已设置/此处没有更改
  3. 99% 以上的时间搜索将按同一列进行,该列已编入索引(例如列:“key”)
  4. 引擎:MyISAM
  5. 行格式:动态
  6. 还有 2 个其他索引(列:id/location)

由于每次页面加载都会使用此表,因此我关心的是大小与速度的比率。最多(大约)多少行会非常快,然后快,然后慢,然后减少到爬行?

[列名] | [数据类型] | [整理] 编号 |整数(11) 姓名 | varchar(64) | utf8_general_ci 关键 | varchar(64) | utf8_general_ci | [ 99% 用于搜索:已编入索引] 价值 |正文 | utf8_general_ci 标识符_id |整数(11) 排序顺序 |整数(5) 最后调整 |约会时间 位置 | varchar(255) | utf8_general_ci 组号 |整数(3)

【问题讨论】:

  • 发布 中显示索引的结果,这也是一个带有解释计划的典型查询。
  • 表格并不“慢”。查询可能是。
  • @a_horse_with_no_name 这就是我的意思 - 根据表大小访问表中的数据 - 一种快捷方式,但你说得有道理 - 听起来有点傻

标签: mysql performance


【解决方案1】:

这在很大程度上取决于您的服务器设置。

MySQL 服务器可用的内存量是主要关注点,然后是表配置的存储类型。

您没有指定正在使用什么类型的索引,是key 一个UNIQUE 索引,还是有重复的东西?考虑到使用情况,我猜想UNIQUE - 这将在相当长的一段时间内保持快速。如果您记住搜索唯一索引的效率大约为 o(log n),并且在此类索引上的搜索本身相对微不足道,那么该索引必须超出主内存并且速度相当慢媒体可以发挥重要作用。

【讨论】:

  • 我目前无法访问 MySQL 内存限额,但它位于由 VDS 1024/50 提供支持的 localhost 上。另外更正:搜索按 2 列进行(第 2 列:identifier_id),机器人索引不是唯一的。问题:20.000 行仍然是安全限制吗? (球场是我要寻找的,因为我会在项目完成后对其进行测试)
  • @Jeffz:您的意思是一次两列,既不是唯一的,也不是不同搜索中的两列?具有该表大小的 20,000 条记录将导致索引相当小,即使在那些文本字段上,也只有几 MB。这对大多数服务器来说都不是问题。
  • 感谢您抽出宝贵的时间-> 一次两列,这不是唯一的情况-我需要此表“活泼”-因此我还考虑将内容拆分为单独的表-带有 identifier_id作为分离点。在这种情况下,只会搜索键,并且每个表永远不会超过 5K 行。但这样的分裂是一件麻烦事。这就是这个问题的原因。
  • @Jeffz:当您搜索时,WHERE 子句是两个字段都具有相等性检查和 AND (key = 'abc' AND identifier_id = 123) 还是您在任一索引上使用不等式,或者将它们与OR? (key = 'abc' OR identifier_id < 50)。如果您正在执行前者,则在两个字段上创建一个组合索引,否则在每个字段上都有单独的索引。将其保留为单个表很可能会更快。 20K 行并不奇怪,数百万行并不稀奇。
  • 谢谢。它给了我一些新的视角和可以测试的东西。再次感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 2021-12-19
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多