I made an SQLite database in a VB.NET application. It stores time series data for multiple varName records over 2 tables:
- Table - varNames:- CREATE TABLE IF NOT EXISTS varNames( id INTEGER PRIMARY KEY, varName TEXT UNIQUE );- It looks like this: - ID | varName --------------- 1 | var1 2 | var2 ... | ...
- Table - varValues:- CREATE TABLE IF NOT EXISTS varValues( timestamp INTEGER, varValue FLOAT, id INTEGER, FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE );- It looks like this: - timestamp | varValue | id ------------------------------ 1 | 1.0345 | 1 4 | 3.5643 | 1 1 | 7.7866 | 2 3 | 4.5668 | 2 ... | .... | ...
First table contains varName with ID. The second contains the values of each varName as time series (per timestamp). A foreign key links the tables. Insert into varNames looks like this:
INSERT OR REPLACE INTO varNames (
    varName
) VALUES (
    @name
);
I insert values for a specific varName to the second table like this:
INSERT OR REPLACE INTO varValues (
    timestamp,
    varValue,
    id
) VALUES (
    @timestamp,
    @value,
    (SELECT id FROM varNames WHERE varName = @name)
);
I don't know the varName's ID for the corresponding varValues record at the time of insert. This is why I use :
(SELECT id FROM varNames WHERE varName = @name)
Seems slow compared to addressing by ID directly. How can I improve INSERT performance into the second table?
 
    