This update statement runs just fine when the table has a few hundred or even a few thousand rows, but once it reaches 100,000 rows in the subfields table it never finishes running.
UPDATE
Records
SET Author = (SELECT Data
FROM Subfields
LEFT OUTER JOIN Fields f on f.FieldID = Subfields.FieldID
WHERE f.RecordID = Records.RecordID AND f.TagNumber = '100' and Code = 'a')
This is the execution plan. It's definitely using indexes, so I'm not sure how I could possibly make it faster.
selectid order from detail
0 0 0 SCAN TABLE Records
0 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 0
0 0 0 SEARCH TABLE Subfields USING INDEX Code_FieldID (Code=?)
0 1 1 SEARCH TABLE Fields AS f USING INTEGER PRIMARY KEY (rowid=?)
I'd greatly appreciate it if someone could help me solve my speed issues. Thanks in advance!
CREATE TABLE [Fields](
[FieldID] integer PRIMARY KEY ASC AUTOINCREMENT NOT NULL,
[RecordID] nvarchar(2147483647) NOT NULL,
[TagNumber] nvarchar(2147483647) NOT NULL,
[Ind1] char,
[Ind2] char,
[ControlData] nvarchar(2147483647),
FOREIGN KEY([RecordID]) REFERENCES Records([RecordID]) ON DELETE CASCADE ON UPDATE RESTRICT);
CREATE TABLE [Records](
[RecordID] integer PRIMARY KEY ASC AUTOINCREMENT NOT NULL,
[DateAdded] datetime NOT NULL,
[DateChanged] datetime,
[Author] nvarchar(2147483647),
[Title] nvarchar(2147483647),
[CopyrightDate] integer,
[Barcode] nvarchar(2147483647),
[Classification] nvarchar(2147483647),
[MainEntry] nvarchar(2147483647),
[Custom1] nvarchar(2147483647),
[Custom2] nvarchar(2147483647),
[Custom3] nvarchar(2147483647),
[Custom4] nvarchar(2147483647),
[Custom5] nvarchar(2147483647),
[ImportErrors] nvarchar(2147483647));
CREATE TABLE [Settings](
[RecordListAtTop] bool,
[ClearDatabaseOnExit] bool,
[ExportFormat] char(1),
[CustomTag1] nvarchar(3),
[CustomCode1] nvarchar(1),
[CustomData1] nvarchar(2147483647),
[CustomTag2] nvarchar(3),
[CustomCode2] nvarchar(1),
[CustomData2] nvarchar(2147483647),
[CustomTag3] nvarchar(3),
[CustomCode3] nvarchar(1),
[CustomData3] nvarchar(2147483647),
[CustomTag4] nvarchar(3),
[CustomCode4] nvarchar(1),
[CustomData4] nvarchar(2147483647),
[CustomTag5] nvarchar(3),
[CustomCode5] varchar(1),
[CustomData5] nvarchar(2147483647));
CREATE TABLE [Subfields](
[SubfieldID] integer PRIMARY KEY ASC AUTOINCREMENT NOT NULL,
[FieldID] bigint NOT NULL,
[Code] char NOT NULL,
[Data] nvarchar(2147483647) NOT NULL,
FOREIGN KEY([FieldID]) REFERENCES Fields([FieldID]) ON DELETE CASCADE ON UPDATE RESTRICT);
CREATE INDEX [Code_FieldID]
ON [Subfields](
[Code],
[FieldID]);
CREATE INDEX [FieldID]
ON [Subfields](
[FieldID] ASC);
CREATE INDEX [RecordID]
ON [Fields](
[RecordID] ASC);