我有一些只有2个int列的innoDbs,它们是其他表的主键的外键。例如一个表是user_items,它有2列,userId,itemId,都是用户和项目表的外键,如果更新或删除则设置为级联。我应该向此类表添加第3列并将其设为主键,还是就性能或任何其他优势而言,现在的方式更好? 最佳答案 仅仅为了添加一个ID列而添加第三个ID列是没有意义的。事实上,当您插入或删除行时,它只是增加了处理开销(索引维护)。主键不一定是“ID列”。如果你只允许用户和项目之间的单一关联(一个用户不能被分配两次相同的项目)那么定义(userid,itemid
我最近安装了MySQL5.5。我使用InnoDB作为我所有数据库的引擎。我注意到mysql数据库默认及其所有表(用户、数据库等)都是MyISAM。他们有什么理由不能/不应该是InnoDB吗?有谁知道MySQL是否要求mysql数据库是MyISAM? 最佳答案 警告不要将mysql数据库中的MySQL系统表从MyISAM转换为InnoDB表!这是不受支持的操作。如果这样做,MySQL不会重新启动,直到您从备份中恢复旧系统表或使用mysql_install_db脚本重新生成它们。http://dev.mysql.com/doc/refm
我想知道InnoDB是否是格式化表的最佳方式?该表包含一个字段,主键,并且该表每天将获得816k行(估计值)。这将很快变得非常大!我正在研究一种文件存储方式(这样会更快吗)?该表将存储已处理的TwitterID的ID号?此外,SELECTmin('id')语句的任何估计内存使用情况?非常感谢任何其他想法! 最佳答案 我建议您开始partioning你的table按ID或日期。分区根据一些定义的逻辑将一个大表拆分成几个较小的表(比如按日期范围拆分),这使得它们在性能和内存方面更易于管理。MySQL5.1内置了此功能,您也可以使用自定义
当使用phpMyAdmin或MySQLGUI工具时,每当我创建一个InnoDB表时,它都会像这样向表添加注释:InnoDBfree:9216kB这是什么意思?它有什么用? 最佳答案 InnoDB每个文件存储许多表。在那个InnoDB数据文件中,可以有空闲空间:当您删除表或索引、删除行或用更小的行(例如,更短的TEXT)替换行时文件每次增长nMB(在my.cnf中配置)注释只是告诉您InnoDB数据文件中有多少可用空间。当接近0时,InnoDB将扩展数据文件。我相信默认分配block是10MB,所以这可能就是为什么您有将近10MB的空
来自INFORMATION_SCHEMA的“TABLES”表的CREATE_TIME列显示了我所有InnoDB表的相同CREATE_TIME。这意味着所有这些表都是在2010-03-2606:52:00和2010-03-2606:53:00之间创建的,而实际上它们是几个月前创建的。InnoDB表的CREATE_TABLE字段会自动更改吗? 最佳答案 对于InnoDB,INFORMATION_SCHEMA.TABLES中的CREATE_TIME值基于表的FRM文件的修改时间。因此,这很可能代表您上次运行ALTERTABLE或OPTIM
现在,我正在考虑是否使用COUNT(id)或“count”列。我听说InnoDBCOUNT在没有WHERE子句的情况下非常慢,因为它需要锁定表并进行全索引扫描。使用WHERE子句时是否有相同的行为?例如,如果我有一个包含100万条记录的表。在没有WHERE子句的情况下执行COUNT将需要使用索引查找100万条记录。如果添加WHERE子句将符合条件的行数从100万减少到500,000,查询会变得明显更快吗?考虑SO上的“Badges”页面,在badges表中添加一个名为count的列,并在用户获得该特定徽章时递增它比这样做更快SELECTCOUNT(id)FROMuser_badgesW
快速提问。与我有25年数据库经验的friend交谈时,他告诉我你是否在数据库中使用外键约束;例如,当一个表被写入消息表时,它将锁定父表上的相关行,例如用户。这是真的吗?他还说将索引应用到外键列应该可以克服这种锁定,这是真的吗?我担心我的网站流量在增长,我可以想象这是一个问题!谢谢! 最佳答案 我写了一篇关于此的博文-http://www.mysqlperformanceblog.com/2010/09/20/instrumentation-and-the-cost-of-foreign-keys/-演示就像你的friend描述的那样
我的MySQL表有一个严重的问题,曾经有InnoDB表在使用中,现在不知何故被隐藏了看看这个[pic]*链接已删除-标题中的表格数量为79,实际计数为74。这些表是那些正在使用中的我没有任何最近的数据库备份,所以这对我来说是一场生死游戏我检查了我的VPS,我在/etc/lib/mysql/db_name/找到了它们。编辑:我在网上搜索了一下,发现每个表应该有3个相关文件。例如,表table_users有:--table_users.frm--table_users.MYD--table_users.MYI对于那些隐藏的表,只有.frm文件,而缺少一个表的其他两个文件。我应该将我的问题更
我在下面的示例中无法创建customers_b。错误代码1005/错误号:121。但是,如果我先创建customers_b而不是customers_a,则不会创建customers_a。怎么了?为什么我不能将多个FK链接到PK“id_state”?谢谢!SET@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0;SET@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0;SET@OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='TRADITIO
我有一个包含1700万行的表。我需要获取该表的1列并将其全部插入到另一个表中。这是我所做的:INSERTIGNOREINTOtable1(name)SELECTnameFROMmainWHEREIDInnoDB执行大约需要3分45秒但是,MyISAM的执行时间不到4秒。为什么不同?我看到每个人都在称赞InnoDB,但老实说,我看不出它对我有什么好处。它慢得多。我知道这对完整性和诸如此类的东西很有好处,但我的许多表格都不会更新(只是阅读)。我是否应该为InnoDB而烦恼? 最佳答案 差异很可能是由于innoDB的配置所致,它比myIS