我在myISAM中拥有了所有表,但是当我长时间运行更新作业时,表级锁定开始杀了我.我将我的主表转换为InnoDB,现在我的许多查询都需要花费1分钟才能完成,这些查询几乎是在myISAM上完成的.他们通常陷入困境Sorting result.我做错什么了吗?
例如 :
SELECT * FROM `metaward_achiever`
INNER JOIN `metaward_alias` ON (`metaward_achiever`.`alias_id` = `metaward_alias`.`id`)
WHERE `metaward_achiever`.`award_id` = 1507
ORDER BY `metaward_achiever`.`modified` DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
现在大约需要90秒.这是描述:
+----+-------------+-------------------+--------+-------------------------------------------------------+----------------------------+---------+---------------------------------+-------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------+--------+-------------------------------------------------------+----------------------------+---------+---------------------------------+-------+-----------------------------+
| 1 | SIMPLE | metaward_achiever | ref | metaward_achiever_award_id,metaward_achiever_alias_id | metaward_achiever_award_id | 4 | const | 66424 | Using where; Using filesort |
| 1 | SIMPLE | …Run Code Online (Sandbox Code Playgroud) 今天我在java开发人员的采访中听到这个.我必须列出MyISAM相对于InnoDB的一些优点以及为什么它仍然被广泛使用.他们正在等待我的回答作为这个问题的标题.
我从他们自己的答案中了解到:MyISAM没有外键,DB可以轻松集群(例如每个服务器一个表).但是为什么我们不能简单地创建没有外键的InnoDB表?这个解释听起来很奇怪..
我的意思是复制单个MyISAM表文件是:(
关闭mysqld并将.frm,.myd和.myi文件从一个数据库文件夹复制到另一个数据库文件夹)
问题:
(a)我可以用这种方式从一个数据库备份MySQL数据库文件夹服务器到不同MySQL版本的另一台服务器?
(b)这个备份文件可以移动到不同的操作系统吗?(例如:debian到centos)
我正在我的笔记本电脑上开发一个小型WAMP Web应用程序,我在其中运行了mySQL实例,并为数据库引擎选择了InnoDB.经过几个星期的开发,我想向公众开放,发现我的网站主机提供的数据库服务器不支持InnoDB,只支持MyISAM.
从我的笔记本电脑上的innoDB架构生成的create-and-populate脚本,当针对实时数据库执行时,可以设法创建单独的TABLES,但后来遇到创建VIEW的问题.MyISAM不支持视图吗?我知道FOREIGN KEYs不是.这就是为什么我选择了InnoDB的原因...我有什么机会让我的innoDB架构设计与myISAM一起工作?
有没有直接的方法将整个架构从一个存储引擎转换到另一个?我应该寻找另一个提供支持innoDB的mysql数据库的Web主机吗?
我一直在阅读是否使用myisam或innodb作为日志表(大量写入,很少读取).虽然有些人说myisam总体上更快,资源更少,但其他人说myisam实际上是更糟糕的选择,因为它只有表级锁定.
有没有人有这种情况的实际经验并且小心分享他们的建议?
提前致谢
我正在使用这个表结构来表示像TAGs系统这样的"toxi"
table TAGS
+--------+-------------------+
| alias | isactive | varchar(55), tinyint(1)
+--------+-------------------+
| party | 1 |
Engine: MyISAM (because I use some 'autocomplete' using this table (field:alias) for
a %xxx% search
table TAGREL
+-------------+-------------------+
| tags_alias | productID | varchar(55), int(11)
+-------------+-------------------+
| party | 15 |
Engine: InnoDB (i dont need full search here)
This TAGREL table uses tags.alias as FK (on update cascade, on delete cascade) and
product id as FK (on update no action, on delete …Run Code Online (Sandbox Code Playgroud) 我有两个表(缩小到重要字段):
syskeywordobjects:
pksyskeywordobjects BIGINT
fksyskeywords BIGINT
fkcontents BIGINT
fkcontents INDEX (fkcontents)
fksyskeywords INDEX (fksyskeywords)
fkcontents_fksyskeywords INDEX (fkcontents, fksyskeywords)
syskeywords:
pksyskeywords BIGINT
keyword VARCHAR
keyword INDEX (keyword)
Run Code Online (Sandbox Code Playgroud)
在这两个表上,我运行以下查询:
SELECT k.pksyskeywords, k.keyword, COUNT( k.pksyskeywords ) AS counter
FROM syskeywordobjects ko INNER JOIN syskeywords k ON ko.fksyskeywords = k.pksyskeywords
WHERE (
k.pksyskeywords <> 1218713201167374664
AND EXISTS (
SELECT innerko.pksyskeywordobjects
FROM syskeywordobjects innerko
WHERE ko.fkcontents = innerko.fkcontents
AND innerko.fksyskeywords = 1218713201167374664
)
)
GROUP BY k.pksyskeywords, k.keyword
ORDER BY counter DESC
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
如果表使用MyISAM,则查询大约需要1-2秒,但如果我使用InnoDB(我必须这样做)则需要25-30秒.为什么InnoDB慢了大约20倍? …
当我测试一些mysql提交和回滚过程时,我发现了一些关于MyISAM Engine的提交和回滚的问题.可以提交或回滚不在MyISAM引擎上工作吗?我可以在InnoDB和MyISAM Engine之间了解不同.
我有一个要维护的项目,该项目的持久性层使用JPA,Hibernate并且它在MySQL服务器上运行,数据库不在数据库中 relational,并且引擎MyISAM在所有表上。
我有一些外键关系hps映射为@ManyToOne我实体上的关系。
现在的问题是,这些列中的某些列应该是foreignkeys为了正确映射而创建的,但它们不是(因为引擎是MyISAM,并且DB仅relational是理论上的),因此其中一些列具有错误的值,例如(负数) -1,0,不存在的已故父母)。
@Entity
public class EntityA {
@ManyToOne
@JoinColumn(name="COL_FK")
private EntityB b;
}
Run Code Online (Sandbox Code Playgroud)
在数据库中,可能的值为COL_FK:0,-1,DEAD PARENTS
我既不能更改数据库结构,也不能编辑列中的数据。我所能做的就是更改代码。
我怎么能告诉Hibernate忽略那些值,而不会RuntimeException仅仅因为它的一个元素包含了一个错误的foreingkey值就抛出一个列表。
谢谢。
更新:
@Embeddable
public class EntityA {
@ManyToOne()
@JoinColumn(name = "idClient")
@NotFound(action = NotFoundAction.IGNORE)
private ClientBO idClient;
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪 :
AVERTISSEMENT: org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find xx.xxx.xx.xxx.ClientBO with id 210; nested exception is …Run Code Online (Sandbox Code Playgroud)