小编Nat*_*tan的帖子

分区是否有助于按主键查找和插入/更新?

我使用的是 MariaDB 10.1 和默认的 InnoDB 存储,我有几个表,目前有 10 到 1 亿行。这些表将保持每月数百万的增长,而且主要是缓存。

它们要么有一个单列主键 ( BIGINT) 或一个复合主键(两BIGINT列),没有 AUTO_INCREMENT,我总是按主键插入、选择或更新。我还通过主键或 selects 进行了很多连接WHERE PK IN (1, 2, 3, 4...)

此外,这些表每小时会收到大量更新,我通常一次以 5000 或 10000 个批次更新它们。对于其中一些表,我们有比选择更多的插入和更新。

我有3个问题:

  1. 在我看来,通过 PK 返回 1 行 ( SELECT x, y FROM table WHERE pk = 123) 的简单选择在性能上与分区没有实际差异。那正确吗?

  2. 加入或选择为WHERE PK IN(SELECT PK FROM ...)怎么样?与单个表相比,它会导致更多的扫描加入分区表吗?

  3. 考虑到我通常使用以下方法进行大量并发批处理(多个服务器可能同时发送数据):

    • INSERT INTO X VALUES (1, 'A'), (2, 'B'), ... ON DUPLICATE KEY UPDATE ... 或者

    • REPLACE INTO X VALUES(1, 'A'), …

mysql mariadb partitioning database-internals

5
推荐指数
1
解决办法
1129
查看次数

在 mysql/mariadb 中使用多个插入自动增加 id

假设我有一个带有 auto_increment 列的表,然后在单个语句中插入多个值:

insert into foo (bar) values ('a'), ('b'), ('c');

从文档中,last_insert_id()返回查询的第一个生成的 ID,a在本例中为 ID 。

mysql 是否保证 abc将被分配顺序值?

换句话说,如果 last_insert_id() 返回 1 for a,是否有任何保证 b = 2 和 c = 3?或者是否存在由于多个并发插入而导致的结果,例如“a = 1, b = 5, c = 9”?

mysql mariadb auto-increment

3
推荐指数
1
解决办法
3137
查看次数