问题标签 [myisam]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
811 浏览

sql - MySQL MyISAM 表性能问题重温

这个问题与这个有关。

我有一个具有以下结构的页表:

数据列包含每条记录大小约为 80KB - 200KB 的文本。数据列中存储的数据总大小约为 1.5GB。

执行此查询需要0.08秒:

但执行此查询大约需要130.0秒:

如您所见,我在 page.pageid 上有一个主索引,在 page.sourceid 上有一个索引。那么第二个查询应该花那么长时间吗?

编辑#1

解释返回

很抱歉,分析不起作用... MySQL(其 4.1.22)无法识别 SHOW PROFILE 查询。

显示索引返回

0 投票
3 回答
1093 浏览

sql - 运行慢查询的简单 MySQL 表

我有一个非常简单的表,有两列,但有 450 万行。

当我运行一个简单的查询时:

mysql 在返回大约 10 行之前会占用 CPU 并需要 2-5 秒。数据非常均匀地分布在整个表中,并且我正在访问索引字段(我还分析/优化了表并且我从未更改表的内容),那么查询需要这么长时间的原因是什么?

编辑: 似乎navicat 在对我撒谎,而我的主键实际上并没有按正确的顺序键入,因为它正在向我显示表格。

0 投票
3 回答
1583 浏览

mysql - MyISAM 表损坏

有时我会收到类似“表被标记为损坏并需要修复”的错误。该数据库(表)正在使用 MyISAM。最近这种情况不断发生。可能是什么原因?最近我正在执行批量插入

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

它就挂了。或者花了很长时间才完成它似乎挂在我身上。第二天,当我检查表时再次标记为损坏。当我尝试使用 mysqlcheck -r 时,它说所有表都正常,当它到达那个“损坏”的表时,它又挂在那里了......

那么,我能做些什么来防止这种情况发生。可能是什么原因。数据库托管在第 3 方,我该如何调试?

InnoDB 是更可靠的引擎吗?我听说 MyISAM 更快,但其他人说 InnoDB 也可以很快,但优化它需要更多的时间。我可以得出结论,即使经过优化,InnoDB 也更可靠但总体上有点慢?

0 投票
2 回答
17001 浏览

mysql - MySQL FULLTEXT 不工作

我正在尝试使用 MySQL 的 FULLTEXT 索引为我的 PHP Web 应用程序添加搜索支持。

我创建了一个测试表(使用 MyISAM 类型,带有单个文本字段a)并输入了一些示例数据。现在,如果我是对的,下面的查询应该返回这两行:

但是它没有返回。我做了一些研究,据我所知,我做的一切都是正确的——该表是一个 MyISAM 表,已设置 FULLTEXT 索引。我尝试从提示符和 phpMyAdmin 运行查询,但没有成功。我错过了一些重要的东西吗?


更新:好的,虽然 Cody 的解决方案适用于我的测试用例,但它似乎不适用于我的实际表:

我正在使用的数据:

我现在运行的查询是:

应该返回第 3 行 header_bg2.png。相反,我得到另一个空结果集。我的布尔搜索选项如下:

“标题”在字长限制内,我怀疑它是一个停用词(我不确定如何获取列表)。有任何想法吗?

0 投票
3 回答
1554 浏览

php - 删除 MySQL 中的相关记录

我有两个 MySQL (MyISAM) 表:

当从“帖子”表中删除相应的帖子记录时,我想删除属于特定帖子的“评论”表中的所有评论。

我知道这可以使用 InnoDB 的级联删除来实现(通过设置外键)。但是我将如何使用 PHP 在 MyISAM 中做到这一点?

0 投票
1 回答
1185 浏览

mysql - 将引擎从 MyISAM 更改为 InnoDB 时解决 MySQL 错误

上周我的数据库发生了一些损坏,网络托管公司的技术人员将我所有的表都更改为 MyISAM 并对这些表进行了修复。

但是,我的应用程序需要 InnoDB 表。我已经尝试过本网站中提到的方法但是,我收到了这条消息

我应该怎么做才能解决问题?

0 投票
2 回答
707 浏览

mysql - 恢复 MySQL 表所需的最小文件集(MyISAM 和 InnoDB)

恢复 MyISAM 表时,唯一需要的文件是数据文件 ( tablename.MYD) - 其余文件(索引文件tablename.MYItablename.frm)可以使用REPAIR TABLE.

假设我使用的是 InnoDB(带有“ innodb_file_per_table”设置)——从文件中恢复数据库表所需的最小文件集是多少?

0 投票
1 回答
320 浏览

mysql - 删除的行重新出现

我在连接到 mysql (5.0.51a-3ubuntu5.4-log) 的 ubuntu 上运行 ac 程序。

该程序的主要任务是处理来自小型(<5000 行)myisam 表的记录。如果成功处理该行,则将其删除。如果不是,则在稍后的日期重试。在多次尝试失败后,它被删除。删除使用表的主键并且很简单,即它没有指定低优先级、快速或忽略。该程序使用单独的连接进行读取和写入。

有时,下一次轮询会为需要处理的行返回一条已删除的记录。这似乎只发生在由于达到重试限制而被删除的行上。更令人惊讶的是,有时下一个轮询没有返回任何内容,之后的轮询返回已删除的行。

这是否与使用不同的连接进行读取和写入有关?我希望所有连接都立即尊重删除,因为我认为 myisam 使用表锁进行删除。

0 投票
4 回答
2262 浏览

mysql - rsync 和 MyISAM 表

我正在尝试使用 rsync 来备份 MySQL 数据。这些表使用 MyISAM 存储引擎。

我的期望是在第一次 rsync 之后,后续的 rsync 会非常快。事实证明,如果表数据发生了变化,操作速度就会变慢。

我用一个包含真实数据的 989 MB MYD 文件做了一个实验:

测试 1 - 重新复制未修改的数据

  • rsync -a orig.MYD copy.MYD
    • 正如预期的那样需要一段时间
  • rsync -a orig.MYD copy.MYD
    • 瞬时 - 加速数以百万计

测试 2 - 重新复制稍作修改的数据

  • rsync -a orig.MYD copy.MYD
    • 正如预期的那样需要一段时间
  • UPDATE table SET counter = counter + 1 WHERE id = 12345
  • rsync -a orig.MYD copy.MYD
    • 与原件一样长!

是什么赋予了?为什么 rsync 只是为了复制一个微小的变化而需要永远?

编辑:事实上,测试 2 中的第二个 rsync 与第一个一样长。rsync 显然是再次复制整个文件。

编辑:从本地复制到本地时结果是 --whole-file 是隐含的。即使使用 --no-whole-file,性能仍然很糟糕。

0 投票
2 回答
20615 浏览

mysql - MyISAM 的 key_buffer_size 的 InnoDB 等价物是什么?

使用 MyISAM 时,配置设置key_buffer_size定义了 MySQL 缓存常用索引数据块的全局缓冲区的大小。

InnoDB 对应的设置是什么?