U kunt met deze vraag weinig doen.
Probeer dit:
-
Maak een
PRIMARY KEY
opcategoryIds (categoryId)
-
Zorg ervoor dat
supplier (supplied_id)
is eenPRIMARY KEY
-
Zorg ervoor dat
category_product (ProductID, CategoryID)
(in deze volgorde) is eenPRIMARY KEY
, of je hebt een index metProductID
leidend.
-
Bijwerken:
Als het INSERT
. is dat het probleem veroorzaakt en product_search_query
in een MyISAM
tabel kan het probleem zijn met MyISAM
vergrendelen.
MyISAM
vergrendelt de hele tafel als het besluit een rij in een vrij blok in het midden van de tafel in te voegen, wat de time-outs kan veroorzaken.
Probeer INSERT DELAYED
in plaats daarvan:
IF @resultsFound > 0 THEN
INSERT DELAYED INTO product_search_query (QueryText, CategoryId) VALUES (keywords, topLevelCategoryId);
END IF;
Hierdoor worden de records in de invoegwachtrij geplaatst en onmiddellijk teruggestuurd. Het record wordt later asynchroon toegevoegd.
Houd er rekening mee dat u informatie kunt verliezen als de server uitvalt nadat de opdracht is gegeven, maar voordat de records daadwerkelijk zijn ingevoegd.
Bijwerken:
Aangezien uw tabel InnoDB
. is , kan het een probleem zijn met tafelvergrendeling. INSERT DELAYED
wordt niet ondersteund op InnoDB
.
Afhankelijk van de aard van de zoekopdracht, DML
vragen op InnoDB
tafel kan spleetvergrendelingen plaatsen die de inzetstukken vergrendelen.
Bijvoorbeeld:
CREATE TABLE t_lock (id INT NOT NULL PRIMARY KEY, val INT NOT NULL) ENGINE=InnoDB;
INSERT
INTO t_lock
VALUES
(1, 1),
(2, 2);
Deze zoekopdracht voert ref
uit scant en plaatst de sloten op individuele records:
-- Session 1
START TRANSACTION;
UPDATE t_lock
SET val = 3
WHERE id IN (1, 2)
-- Session 2
START TRANSACTION;
INSERT
INTO t_lock
VALUES (3, 3)
-- Success
Deze query voert, terwijl hij hetzelfde doet, een range
. uit scan en plaatst een gap lock na sleutelwaarde 2
, waardoor de sleutelwaarde 3
. niet kan worden ingevoegd :
-- Session 1
START TRANSACTION;
UPDATE t_lock
SET val = 3
WHERE id BETWEEN 1 AND 2
-- Session 2
START TRANSACTION;
INSERT
INTO t_lock
VALUES (3, 3)
-- Locks