在一个表中删除多个 KEYS 是首选还是一个一个的首选?
“按键A,按键B,按键C”
表中有 9 亿多条记录。
它在内部如何运作?
当给出并行加载数据 infiles 时,我想了解 innodb_autoinc_lock_mode 选项 0,1 和 2 之间的区别。
我在“0”选项中看到,它锁定整个表并执行请求 N 条记录的第一个事务,例如 TX1。因此,当下一个事务说 TX2 同时引发时,当第一个事务仍在使用“加载数据”上传时,它必须在队列中等待第一个 TX1 完成。然后它从表中设置 max(AI_column)+1 值并为下一组加载数据上传。在这种情况下,它不会跳转自动增量数字。
另外我在“1”选项中看到,它锁定整个表并执行请求 N 条记录的第一个事务,比如 TX1。因此,当下一个事务说 TX2 同时引发时,当第一个事务仍在使用“加载数据”上传时,它必须在队列中等待第一个 TX1 完成。然后它从表中设置 max(AI_column)+1 值并为下一组加载数据上传。然后它设置 max(AI_column)+some_creepy_jump。
但是我在“2”选项中看到,它没有锁定整个表。相反,它同时为每个进程保持插入,并为任何请求随机插入记录,并以平均时间结束所有线程(7 个并行线程使用 1000000 条记录的负载数据为 1.21 秒)。在这种情况下,它有多个混合顺序的事务。然后它设置 max(AI_column)+some_creepy_jump atlast。
我正在使用 mysql 5.1.61 。
由于我的项目需要使用表的加载数据进行多个进程。我已经测试了上述选项并最终选择了选项 2。如果我的实验有误,请纠正我。
根据 Postgresql,Mysql 是否不符合 ACID?在一些博客中,我看到 Mysql 不符合 ACID。那有多真实?
在这里不要考虑复制,让我们考虑一个独立的,Mysql ACID 的效率如何?
在我对 Mysql-ACID 的理解中。
A - 原子性(如果一个事务失败必须回滚,则应提交所有事务集。是的意味着所有事务都已提交,不意味着即使失败也必须回滚)。
Mysql 中支持的 IE 特性有。
- 开始交易;..... 犯罪 ;
- auto_commit=1;
C - 一致性。
(PK,FK,UK,非空)。它遵守数据库的关系和约束。实例只有在删除其子键时才能删除父键。
我 - 隔离。用户与其提交状态之间的隔离。
读取可重复读取未提交读取已提交序列化
D - 耐用性。在数据库崩溃的事件中,innodb 通过从 iblog 文件中应用已提交的事务来恢复数据库并丢弃未提交的事务。
单击此处查看此问题的来源。 - 是因为博客是@2001 创建的吗?
2017 年 6 月 30 日更新:根据“Evan Carroll”的回复,我亲自测试了5.7.18-enterprise 上的博客实验。实验得到的结果好像是Mysql is Not an ACID Compliant。
我在为 max(datetime) 记录选择其他列时遇到问题。通俗地说,我需要获取相关列,其中 max(DialDateTime) 记录 Mysql 中的所有日期。
mysql> select max(DialDateTime) as max from log_AP group by date(DialDateTime) ;
+---------------------+
| max |
+---------------------+
| 2012-12-03 07:37:26 |
| 2012-12-04 07:37:04 |
| 2012-12-05 07:37:04 |
| 2012-12-06 07:37:04 |
| 2012-12-07 07:37:04 |
| 2012-12-08 07:37:04 |
| 2012-12-09 07:37:04 |
+---------------------+
Run Code Online (Sandbox Code Playgroud)
7 行(0.00 秒)