问题标签 [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 投票
4 回答
1546 浏览

sql - 设计 SQL 替代方案?

我正在考虑设计和实现我自己的 SQL 等效 (DDL+DML),即...

  1. 纯关系代数语言,以及
  2. 具有优雅的类似于 Lisp-/Scheme 的语法

假设一个 RDBMS,如 MySQL,我究竟需要从哪里开始我的语言设计工作?在 InnoDB 等存储引擎层之上?

我不知道所有 RDBMS 功能通常位于存储引擎之上吗?我目前直观的理解是,创建 RDBMS(例如 MySQL)所需的大部分工作已经在存储引擎中完成(特别是在 InnoDB 中),您需要做的就是创建一个包装语言它。但我也知道,如果这是真的,为什么 MySQL 会存在!

0 投票
7 回答
481 浏览

mysql - 模棱两可的“id”字段

我有以下两个表:

我正在运行以下查询并收到一个id不明确的错误:

如您所见,我没有选择id列。如果我放置system.id在要选择的字段列表中,我将不再收到此错误。不幸的是,处理这些数据的方式我无法返回id——我们不希望它显示给用户。

此外,如果我添加GROUP BY system.systemName我不再收到错误 - 但这似乎不是最佳解决方案。

注意:这LEFT JOIN是有意的,因为并非所有系统都将分配给一个组织。

0 投票
1 回答
1007 浏览

mysql - MySql 外键索引

我正在使用一个 Mysql 表产品,它在类别表上有一个外键 category_id

定义了外键约束(Innodb 引擎)。

我注意到当我从 category_id=1; 的产品中运行 EXPLAIN SELECT * 时

它使用外键,所以我看到 type=Range 和 Key: my_foreign_key

但是当我运行 EXPLAIN SELECT * from products where category_id IN (1,10);

它使用全表扫描:type=ALL, Key:NULL!!!

具有讽刺意味的是,当我从 category_id IN (1,2); 的产品中执行 EXPLAIN SELECT * 时 它使用类型范围和键:My_foreign_key!

所以我想当 category_id 使用不连续的值时会出现问题。

任何想法为什么?

谢谢

0 投票
8 回答
5423 浏览

mysql - MySQL 查询随机取“永远”

我们有一个 XMPP 应用程序,它使用 MySQL 来存储信息。到目前为止,我们没有遇到任何特定的负载问题,但我正在努力为最坏的情况(或最好的,就用户而言;))做好准备。

安装此 MySQL 服务器的主机是具有 2GB RAM 的 Slicehost 切片。

昨天,我激活了慢查询日志记录,以确保我们实际上没有什么慢的。不幸的是,似乎实际上发现了很多慢查询:

这对我来说真的很奇怪,因为 id 实际上是一个主键......表是 InnoDB

我做了一个解释:

发生这种情况一定有另一个原因。在我们的日志中实际上有很多类似的慢查询(使用主键的查询)。

我认为在这里发布 MySQL 设置是有意义的:

我们的大多数请求都是“基本的”,但是,我们需要极快的速度!

关于实际上可能使 MySQL 如此缓慢的任何想法?

[摘要]总结各种答案:

  • 去掉“LIMIT”,把WHERE id = “X”改成WHERE id = X
  • 确保我没有任何不时运行的脚本(备份或其他)会消耗大量资源
  • 确保“主机”实际上不是罪魁祸首。
0 投票
3 回答
1583 浏览

mysql - MyISAM 表损坏

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

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

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

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

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

0 投票
7 回答
1895 浏览

mysql - mysql 应该如何针对大量写入和少量读取进行优化/调整 (100:1)。读取性能要求

我有一个简单的数据库,有 4 个表,每个表有几百万行,还有几个索引。我每分钟执行数百次更新和插入。读取频率要低得多,但它们需要快速 - 对于 Web 应用程序。读取应该有优先权——我可以延迟写入,如果它有助于提高阅读的敏捷性。

目前,当我不编写插入和更新时,选择都很好。当我同时写作时,事情可能会变慢 - 有时会很慢。服务器肯定会受到 IO 限制——我使用 iostat 并看到在高写入期间磁盘单元化率为 99%。

明天我将尝试削减一两个索引,缩小行大小,并禁用查询缓存。有没有人对如何调整表或 mysql 本身以进行大量写入和少量读取有任何其他建议?

这些表当前设置为使用具有紧凑行的 innodb 引擎,并且除了缓冲池大小之外,大多数配置仍设置为默认值。db 将继续快速增长,因此不能将其全部放在 ram 中。

更新:它在 slicehost.com - 1gb ram,raid 10。

0 投票
1 回答
429 浏览

mysql - 如何将外键添加到两个 Innob 表中,以便它们相互自动更新?

我有两个表 users 和 lead_contacts 具有相似的数据。当有人购买产品时,他们就成为了用户。我应该如何修改下面的两个创建状态:

  • 当创建用户时,潜在客户表会收到一个包含 first_name、last_name、company 和 email 的新条目。
  • 当潜在客户表信息更改时,用户表中的名字、姓氏、公司和电子邮件会自动更新

    CREATE TABLE lead_contacts(
    contact_idint(11) NOT NULL auto_increment,
    user_idint(11) unsigned NOT NULL default '0',
    emailvarchar(100) NOT NULL default '',
    companyvarchar(50) NOT NULL default '',
    first_namevarchar(50) NOT NULL default '',
    last_namevarchar(50) NOT NULL default '',
    addressvarchar(100) NOT NULL default '',
    address_2varchar(100) NOT NULL default '',
    cityvarchar(50) NOT NULL default '',
    statevarchar(50) NOT NULL default '',
    countryvarchar(50) NOT NULL default '',
    postal_codevarchar(30) NOT NULL default '',
    phonevarchar(30) NOT NULL default '',
    faxvarchar(30) NOT NULL default '',
    ship_bill_sameenum('Y', ' N') NOT NULL 默认 'Y',
    notestext NOT NULL,
    admin_notestext NOT NULL,
    list_namevarchar(50) NOT NULL default '',
    lead_listint(11) 无符号 NOT NULL 默认 '0',
    is_master_listenum('N', 'Y') NOT NULL 默认 'N',
    active_workenum('Y', 'N') NOT NULL 默认 'Y',
    parentIDint(11) unsigned NOT NULL default '0',
    PRIMARY KEY ( contact_id),
    KEY user_id( user_id),
    KEY lead_list( lead_list),
    KEY is_master_list( is_master_list),
    KEY active_work( active_work),
    KEY parentID( parentID)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;

    CREATE TABLE users(
    userIDint(11) NOT NULL auto_increment,
    access_levelint(11) NOT NULL default '0',
    usernamevarchar(100) NOT NULL default '',
    passwordvarchar(100) NOT NULL default '',
    first_namevarchar(50) NOT NULL default ' ',
    last_namevarchar(50) NOT NULL default '',
    companyvarchar(100) NOT NULL default '',
    emailvarchar(100) NOT NULL default '',
    PRIMARY KEY ( userID),
    UNIQUE KEY username( username)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

0 投票
1 回答
45588 浏览

mysql - MySQL 的默认 ON DELETE 行为是什么?

我正在尝试解析 MySQL文档。他们可以更清楚。他们似乎在说有五种可能性:SET NULL、NO ACTION、RESTRICT、CASCADE 和 SET DEFAULT。

NO ACTION 和 RESTRICT 做同样的事情(防止任何破坏 FK 的数据库更改)并且该事情是默认设置,因此如果您省略 ON DELETE 子句,您就是在说 NO ACTION(或 RESTRICT - 同样的事情)。

SET NULL 允许删除父行,将 FK 设置为 NULL。

CASCADE 删除子行。

SET DEFAULT 永远不应该被使用。

这或多或少是正确的?

0 投票
4 回答
139 浏览

mysql - 是否应该避免向更大的 MySQL 表添加另一个字段?

我有一个包含 350,000 多行的 MySQL-InnoDB 表,其中包含一些内容,如 id、otherId、shortTitle 等。现在我需要一个 Bool/Bit 字段来存储数百或数千行这些行。我应该只是将该 bool 字段添加到表中,还是应该最好创建一个引用旧表 ID 的新表 - 从而不会冒对访问第一个表的所有旧现有函数造成性能问题的风险?

(附带信息:我从不使用“SELECT * ...”。主表有很多阅读,很少写作。)

0 投票
1 回答
235 浏览

mysql - 是否可以在 InnoDB 表中使用 Mysql 外键进行反向查找?

我想知道是否可以在 Mysql (InnoDB) 中使用 FK 进行反向查找。

原因 - 我想从数据库中读取一个类似 XML 的结构(每个“层”使用一个表),但能够动态地做到这一点。我希望能够通过添加新表并设置 FK 约束来更新 xml 结构。

澄清一下,假设我们有一个表“parent”,其中包含 id (parent_id) 和另外两个列 (k1 和 k2)。xml 看起来像(省略 id):

现在我们添加一个子表,其外键引用 parent_id 和另一列 (ck1)。相同的查询(之后进行一些处理)现在应该给出:

这可能吗?要“SELECT * FROM parent_table”并设置某种参数以返回带有 FK 点的子行吗?

非常感谢!/胜利者