Tag: innodb

什么是MySQL数据库引擎?

我环顾四周,发现一些MySQL引擎是innodb和MyISAM。 也许还有更多。 我的问题是这些数据库引擎是什么? 不同的MySQL引擎有什么区别? 更重要的是,我如何决定使用哪一个?

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

我试图parsingMySQL 文档 。 他们可以更清楚。 他们似乎在说有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT。 没有行动和RESTRICT做同样的事情(防止任何数据库改变,打破FK),那东西是默认的,所以如果你省略ON DELETE子句,你说没有行动(或限制 – 同样的事情)。 SET NULL允许父行删除,将FK设置为​​NULL。 CASCADE删除子行。 应该永远不要使用SET DEFAULT。 这或多或less是正确的?

最快的方法来删除巨大的MySQL表

我有一个巨大的MySQL(InnoDB)数据库在会话表中有数百万行,这是由与我们在同一台服务器上运行的无关的,发生故障的爬行程序创build的。 不幸的是,我现在必须解决这个混乱。 如果我尝试truncate table sessions; 似乎花了很长的时间(30分钟以上)。 我不关心数据; 我只是想尽快把桌子擦掉。 有没有更快的方法,还是我不得不坚持一夜之间?

我如何设置MySQL使用的默认存储引擎?

我一直在编写SQL来创build一个MySQL数据库,其中包含一些默认选项,包括字符集和sorting规则。 是否可以将此数据库中表的默认存储引擎设置为InnoDB? 我一直在查看MySQL 5.1手册,我发现ENGINE=innodb语句会附加到CREATE TABLE语句中,但是我还没有find与CREATE DATABASE语句相关的任何内容。 有没有一个正常的方法来做到这一点,作为数据库创build的一部分,还是需要在逐个表的基础上指定?

MySQL AUTO_INCREMENT不会ROLLBACK

我使用MySQL的AUTO_INCREMENT字段和InnoDB来支持事务。 我注意到,当我回滚事务,AUTO_INCREMENT字段不回滚? 我发现它是这样devise的,但有没有解决这个问题的方法?

强制InnoDB重新检查表/表上的外键?

我有一组InnoDB表,我需要通过删除一些行并插入其他行来定期维护。 有几个表具有引用其他表的外键约束,所以这意味着表加载顺序是重要的。 要插入新行而不用担心表的顺序,我使用: SET FOREIGN_KEY_CHECKS=0; 之前,然后: SET FOREIGN_KEY_CHECKS=1; 后。 当加载完成时,我想检查更新表中的数据是否仍然具有参照完整性 – 新行不会破坏外键约束 – 但似乎没有办法做到这一点。 作为一个testing,我input的数据确实违反了外键约束,在重新启用外键检查时,mysql不会产生任何警告或错误。 如果我试图find一种方法来指定表加载顺序,并在加载过程中留下外键检查,这不会允许我加载数据在一个自引用外键约束的表中,所以这将不是可接受的解决scheme。 有没有办法强制InnoDBvalidation表或数据库的外键约束?

在MySQL中的UUID性能?

我们正在考虑使用UUID值作为MySQL数据库的主键。 插入的数据是从数十,数百或甚至数千个远程计算机中生成的,并且以每秒100至40,000个插入的速率插入,我们将不会做任何更新。 在我们开始剔除数据之前,数据库本身通常会达到大约5千万条logging,所以不是一个庞大的数据库,但也不是很小。 我们也计划在InnoDB上运行,尽pipe如果我们正在做的事情有一个更好的引擎,我们可以改变。 我们已经准备好使用Java的Type 4 UUID了,但在testing中已经看到了一些奇怪的行为。 首先,我们将存储为varchar(36),现在我们意识到使用二进制(16)会更好 – 尽pipe我不确定多less更好。 更大的问题是:当我们有50M的logging时,这个随机数据有多糟糕? 如果我们使用例如最左边的比特是时间戳的types1UUID,我们会更好吗? 或者,也许我们应该完全抛弃UUID并考虑auto_increment主键? 我正在寻找关于不同types的UUID的性能的一般想法/技巧,当他们被存储为一个索引/主键在MySQL中。 谢谢!

我怎么知道一个MySQL表是使用myISAM还是InnoDB引擎?

在MySQL中,没有办法为特定的数据库指定存储引擎,只能为单个表指定。 但是,您可以指定要在一个会话期间使用的存储引擎: SET storage_engine=InnoDB; 所以你不必为每个表格指定它。 我如何确认,如果确实所有的表都使用InnoDB?

索引布尔型字段是否有任何性能提升?

我正要写一个包含WHERE isok=1的查询。 顾名思义, isok是一个布尔字段(实际上是根据需要设置为0或1的TINYINT(1) UNSIGNED )。 索引这个领域有什么性能增益吗? 这个引擎(InnoDB在这种情况下)的performance会更好还是更差?

错误1114(HY000):表已满

我想用一个简单的查询添加一行到InnoDB表: INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills'); 但是当我尝试这个查询时,我得到以下内容: ERROR 1114 (HY000): The table `zip_codes` is full 做一个“SELECT COUNT(*)FROM zip_codes”给了我188,959行,这似乎不太多,考虑到我在同一个数据库中有810,635行的另一个表。 我对InnoDB引擎相当不熟悉,从来没有经历过MyISAM的这个问题。 这里有什么潜在的问题? 编辑:这只发生在向zip_codes表添加一行时。