gpt4 book ai didi

database - 具有未知外键的 SQLite 关系 INSERT

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:43 25 4
gpt4 key购买 nike

我在 VB.NET 应用程序中创建了一个 SQLite 数据库。它在 2 个表中存储多个 varName 记录的时间序列数据:

  1. varNames :

    CREATE TABLE IF NOT EXISTS varNames(
    id INTEGER PRIMARY KEY,
    varName TEXT UNIQUE
    );

    看起来像这样:

    ID   |  varName
    ---------------
    1 | var1
    2 | var2
    ... | ...
  2. varValues:

    CREATE TABLE IF NOT EXISTS varValues(
    timestamp INTEGER,
    varValue FLOAT,
    id INTEGER,
    FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE
    );

    看起来像这样:

    timestamp  |  varValue  |  id
    ------------------------------
    1 | 1.0345 | 1
    4 | 3.5643 | 1
    1 | 7.7866 | 2
    3 | 4.5668 | 2
    ... | .... | ...

第一个表包含 varNameID。第二个包含作为时间序列的每个 varName 的值(每个 timestamp)。外键链接表。插入 varNames 如下所示:

INSERT OR REPLACE INTO varNames (
varName
) VALUES (
@name
);

我将特定 varName 的值插入到第二个表中,如下所示:

INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);

插入时,我不知道相应varValues 记录的varNameID。这就是我使用的原因:

(SELECT id FROM varNames WHERE varName = @name)

与直接通过 ID 寻址相比,速度似乎较慢。如何提高第二个表中的 INSERT 性能?

最佳答案

… improve the INSERT performance into the second table?

使用a transaction (最好组合多个 INSERT):

BEGIN TRANSACTION;

INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);

INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);

etc. ...

END TRANSACTION;

Related .

关于database - 具有未知外键的 SQLite 关系 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com