嗨,我使用的是Mysql 5.0.x.
我刚刚将很多表从MyISAM改为InnoDB
使用MyISAM表大约需要1分钟来安装我们的数据库使用InnoDB大约需要15分钟来安装相同的数据库
为什么InnoDB需要这么长时间?
我该怎么做才能加快速度?
数据库安装执行以下步骤
1)删除架构
2)创建架构
3)创建表
4)创建存储过程
5)插入默认数据
6)通过存储过程插入数据
编辑:
大多数情况下,插入默认数据
我有一个全天定期更新的表,所以我正在寻找最可扩展的更新行的方法。这些更新是大批量进行的,因此每次更新可能包含大约 1000 行。
目前,我正在遍历这 1000 行中的每一行并运行一个更新查询……虽然执行时间不长,但与一个简单的批量插入语句相比,它似乎很浪费。所以 REPLACE INTO 是有道理的,因为它基本上删除旧行并插入新行,但这与手动“删除数组中的 where id”然后批量插入相比如何?完全一样的?稍微不一样?有没有更好的方法?
这里的关键是这些不是单行查询,而是批量行查询。所以问题是,运行这些更新的最具可扩展性的方式是什么。我说“可扩展”而不是“最快”,因为这些更新在有活跃用户的生产服务器上定期发生,所以速度很重要,但不是以锁定服务器为代价。
我有这个错误:
行大小太大 (> 8126)。将某些列更改为
TEXTorBLOB或使用ROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSED可能会有所帮助。在当前的行格式中,BLOB768 字节的前缀是内联存储的。
为了解决这个问题,我可以将 InnoDB 更改为 MyISAM 吗?
每秒超过100次插入查询使用哪个引擎
我阅读了 MYISAM 和 Innodb 的差异和优缺点。
但我仍然对表中的 100 多个插入查询(主要用于跟踪目的)感到困惑,我应该使用哪个数据库。
我参考了MyISAM和InnoDB有什么区别?
根据我的理解,对于每次插入,MYISAM 都会锁定表,因此应该使用 innodb 进行行锁定。
但另一方面,MYISAM 的性能要好 100 倍。
那么最佳且正确的选择应该是什么?为什么?
我有一个 MYISAM 表,在该表上执行了长时间运行的 SELECT 语句。这些语句是否会导致正在读取的表上的锁?如果是这样,您如何阻止锁定发生?
根据https://dev.mysql.com/doc/refman/5.7/en/internal-locking.html:
MySQL 对 MyISAM、MEMORY 和 MERGE 表使用表级锁定,一次只允许一个会话更新这些表。这种锁定级别使这些存储引擎更适合只读、多读或单用户应用程序。
这是否也意味着SELECT语句会创建锁?
我的表有posts超过 650 万条记录。每个帖子都使用固定长度表示name。我使用 MySQL Community 5.7,SSD 磁盘,大约 10K-20K IOPS 和 1GB 内存,key-buffer-size设置为 512M(顺便说一句,我主要使用默认 MySQL 配置驱动)。我的资源有限,因此我选择 MyISAM 作为我的存储引擎。我的基准测试表明,就我而言,MyISAM 更快。而且我不太关心数据,因为它可以更新。
所以,这是我的计划信息:
+------------+--------+------------+
| TABLE_NAME | ENGINE | row_format |
+------------+--------+------------+
| posts | MyISAM | Fixed |
+------------+--------+------------+
+---------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| name | char(30) | NO | UNI | …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置Mysql(Ver 14.15 Distrib 6.0.8-alpha,for Win64)以在Windows 7上使用MyISAM作为默认存储引擎.我创建了C:\ my.cnf,其中包含以下内容:
[mysql]
default-storage-engine=myisam
Run Code Online (Sandbox Code Playgroud)
并重新启动mysql服务并尝试从控制台运行mysql后,我收到以下错误消息:
mysql: unknown variable 'default-storage-engine=myisam'
Run Code Online (Sandbox Code Playgroud)
我一直在使用教程,并将上述内容直接复制并粘贴到my.cnf文件中.
我尝试了以下组合:
set default-storage-engine=myisam
storage-engine=mysiam
set storage-engine=mysiam
Run Code Online (Sandbox Code Playgroud) 我有一个表具有非常高的插入率和更新率以及读取率.平均每秒插入和更新大约100行.每秒大约有1000个选择.
该表有大约1亿个元组.这是一个关系表,所以它只有大约5个字段.三个字段包含键,因此它们被索引.所有字段都是整数.
我正在考虑对数据进行分片,但是,它增加了很多复杂性,但确实提供了速度.另一种选择是使用innodb.
该数据库运行在256GB ssd的raid 1上,32GB 1600mhz的RAM和i7 3770k,时钟频率为4Ghz
数据库在高峰时间不断冻结,其中查询可以高达插入或更新200行,每秒2500次选择
你们可以指出我应该做什么吗?
SELECT * FROM table WHERE column LIKE '%whatever%' AND id='1' OR id='2' OR id='3'
Run Code Online (Sandbox Code Playgroud)
当使用上面的代码时,我回到了三行而不是那一行
column LIKE '%whatever%'
我发现它很奇怪,并且无法理解为什么.
如何重写我的sql代码以使用LIKE来检查具有id ='whatever'的sevral行
我使用MYSQL和MyISAM
我有一系列 MyISAM 数据库表,并且正在阅读一些关于它在完整性方面不如 InnoDB 的观点。不过,具体来说,该帖子继续说道,似乎表明您有可能丢失数据。我当然找不到链接(典型的运气是吗?)但我确实记得上面建议的外卖。
插入期间是否有可能丢失实际行?我的假设是这不是真的,但我会对社区的言论感兴趣。
谢谢!
我有RDS与Aurora MySQL 5.6.10a.
default_storage_engine设置为InnoDB且无法修改 ( Modifiable = false)。
当我运行命令时
SHOW ENGINES
Run Code Online (Sandbox Code Playgroud)
我收到:
+----------+---------+-------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+----------+---------+-------------------------+--------------+------+------------+
| 'MyISAM' | 'YES' | 'MyISAM storage engine' | 'NO' | 'NO' | 'NO' |
+----------+---------+-------------------------+--------------+------+------------+
Run Code Online (Sandbox Code Playgroud)
创建带有MyISAM搜索引擎的表。
当我尝试使用命令创建表时:
CREATE TABLE `myTable` (
`myTableId` int(11) NOT NULL AUTO_INCREMENT,
`latLong` point NOT NULL,
`createdAt` …Run Code Online (Sandbox Code Playgroud)