问题标签 [innodb]

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 回答
889 浏览

mysql - 使用 innoDb 实现搜索功能的最佳方式

如果索引在大型产品表中,我需要在一对夫妇上实现全文搜索,使用innodb,由于缺乏事务和关系支持,MyISAM 不是一个选项。

我可以想到几种方法,插件、存储过程、带键的搜索表和 MyIsam 格式的复制索引。

您过去是如何做到这一点的,这是最好的方法(包括我没有提到的任何方法),为什么?

该插件听起来很昂贵,存储过程听起来很慢,搜索表听起来像是管理员的噩梦。

喜欢听听你的意见。

0 投票
0 回答
1436 浏览

mysql - MySQL PBXT 与 InnoDB

我想知道新的 PBXT 引擎与旧的 InnoDB 的优缺点是什么?

我在哪里可以找到功能列表以及比较这两个数据库引擎的一些基准?

0 投票
11 回答
172086 浏览

mysql - MySQL InnoDB 从表中删除数据行后未释放磁盘空间

我有一张使用 InnoDB 存储引擎的 MySQL 表;它包含大约 2M 数据行。当我从表中删除数据行时,它没有释放分配的磁盘空间。optimize table运行该命令后,ibdata1 文件的大小也没有减小。

有没有办法从 MySQL 回收磁盘空间?

我的处境很糟糕;该应用程序在大约 50 个不同的位置运行,现在几乎所有位置都出现了磁盘空间不足的问题。

0 投票
5 回答
18111 浏览

mysql - 更改 innodb_log_file_size 的问题

我过去没有做太多调整,所以这可能相对容易,但是我遇到了问题。这就是我所做的:

  1. 停止 MySQL
  2. 编辑 my.cnf(更改innodb_log_file_size
  3. 删除 ib_logfile0/1
  4. 启动 MySQL

开始正常但是所有 InnoDB 表都有 .frm 文件无效错误,状态显示 InnoDB 引擎被禁用所以我显然回去,删除更改,一切都恢复正常。

我能够更改我尝试过的所有其他变量,但我似乎无法找出即使删除日志文件后 InnoDB 无法启动的原因。我错过了什么吗?

谢谢。

编辑:粘贴下面的日志 - 看起来它似乎仍然可以找到日志文件,即使它们不存在?

关闭:

修改后启动:

在我纠正之前,它只是相同错误的垃圾邮件

当它在重新创建日志文件后启动时,它必须在与我相同的位置查找。

0 投票
3 回答
8836 浏览

mysql - MySQL 表只有一个 varchar 作为外键

我有一个带有单个唯一 VARCHAR(512) 字段的表。我想让另一个表保存对第一个表的外键引用。两个表都使用 InnoDB。如果我向第二个表添加一个 VARCHAR(512) 键并在其上添加一个外键约束,那么 512 字节长的数据会被保存两次吗?

如果是这样,有没有办法只保留对索引的引用而不是对 varchar 本身的引用?

简而言之,我的问题是,在 InnoDB 中是否有一种有效的方法来保存长 VARCHAR 字段的外键?

非常感谢,

亚尼夫

0 投票
1 回答
82 浏览

mysql - 更改约束删除操作

我这样做了:

我应该这样做:

是否有可能改变这个,或者我必须放弃约束并再次添加?

0 投票
4 回答
6346 浏览

mysql - 为什么在创建表后删除 django DATABASE_OPTIONS 的“init_command set engine=INNODB”?

创建数据库表的文档说:

另一种选择是在创建表之前使用 MySQLdb 的 init_command 选项:

这会在连接到数据库时设置默认存储引擎。创建表后,您应该删除此选项,因为它会将仅在创建表期间需要的查询添加到每个数据库连接。

有谁知道为什么在创建表后需要删除这个选项?

0 投票
2 回答
8268 浏览

mysql - MySQL删除行的死锁

我们有一个(目前是 InnoDB)表,其中包含大约 500,000 行。这表示要运行的任务队列。它存储在 MySQL 数据库中。

在持续的基础上,至少每秒一次,但有时更频繁地,我们从中选择数据并随后更新一些行。每天一次,我们从表中删除旧行。

我们开始在桌面上遇到死锁,这使我们的任务处理陷入停顿。这些死锁是在夜间修剪运行期间造成的。DELETE、SELECT 和 UPDATE 的组合意味着基本上不会发生任何有成效的事情。不幸的是,我没有 SHOW ENGINE INNODB STATUS 的输出。

我想知道处理这个问题的最佳选择。请注意,我们的代码检测到死锁并重新发出查询。此外,我们很久以前就发现一次删除所有匹配的行对一个有很多活动的数据库表来说太费力了,所以我们一次将删除限制为 10,000 行,并继续重新发出查询,直到所有必要的行都被删除修剪。

我看到以下选项,并想就哪些是最佳选项提出意见,或对其他选项提出建议:

  1. 一次删除更少的行
  2. 在我们的 DELETE 上使用指数退避,尽管我担心这对我们的特定工作量没有帮助
  3. 根据MySQL 文档锁定表。我们可能会接受在删除期间阻塞 SELECT 和 UPDATE 语句。
  4. 切换到 MyISAM 表类型。我们选择 InnoDB 是因为我们最初在此表上使用事务。这已不再是这种情况。我对细节不够熟悉,不知道这是否是一个可行的解决方案。
  5. 也许使用 UPDATE LOW_PRIORITY。可能是 DELETE 不会影响 SELECT,只会影响 UPDATE,这可能就足够了。
0 投票
1 回答
338 浏览

mysql - 是否在列上添加索引?

我有一张看起来像这样的桌子:

有数十万件商品,我通常按“my_number”订购。

当我按此字段排序时,在“my_number”上添加索引会提高查询性能吗?

我使用 MySQL,表是 InnoDB。

0 投票
2 回答
192 浏览

mysql - 将 InnoDB 表迁移到 PBXT

是否有任何迁移程序或工具可以将数据库(确切地说是 Liferay 数据库)从 InnoDB 迁移到 PBXT?