Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL lưu trữ thủ tục gây ra sự cố?

Bạn có thể làm ít việc với truy vấn này.

Hãy thử điều này:

  1. Tạo PRIMARY KEY trên categoryIds (categoryId)

    • Đảm bảo rằng supplier (supplied_id)PRIMARY KEY

    • Đảm bảo rằng category_product (ProductID, CategoryID) (theo thứ tự này) là PRIMARY KEY hoặc bạn có chỉ mục với ProductID dẫn đầu.

Cập nhật:

Nếu đó là INSERT nguyên nhân gây ra sự cố và product_search_query trong MyISAM bảng vấn đề có thể gặp phải với MyISAM khóa.

MyISAM khóa toàn bộ bảng nếu nó quyết định chèn một hàng vào một khối trống ở giữa bảng, điều này có thể gây ra hết thời gian.

Hãy thử sử dụng INSERT DELAYED thay vào đó:

IF @resultsFound > 0 THEN
    INSERT DELAYED INTO product_search_query (QueryText, CategoryId) VALUES (keywords, topLevelCategoryId);
END IF;

Thao tác này sẽ đưa các bản ghi vào hàng đợi chèn và trả về ngay lập tức. Bản ghi sẽ được thêm vào sau một cách không đồng bộ.

Lưu ý rằng bạn có thể mất thông tin nếu máy chủ chết sau khi lệnh được đưa ra nhưng trước khi bản ghi thực sự được chèn.

Cập nhật:

Vì bảng của bạn là InnoDB , nó có thể là một vấn đề với khóa bảng. INSERT DELAYED không được hỗ trợ trên InnoDB .

Tùy thuộc vào bản chất của truy vấn, DML truy vấn trên InnoDB bảng có thể đặt các khóa khe hở để khóa các miếng chèn.

Ví dụ:

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);

Truy vấn này thực hiện ref quét và đặt ổ khóa trên các bản ghi cá nhân:

-- 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

Truy vấn này, trong khi thực hiện tương tự, thực hiện một range quét và đặt một khóa khoảng trống sau giá trị khóa 2 , điều này sẽ không cho phép chèn giá trị khóa 3 :

-- 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển trang web WordPress - thiếu biểu tượng

  2. IP đã chuyển đổi ip2long nên được lưu trữ như thế nào trong MySQL?

  3. mảng cho nhiều điều kiện where_in trong codeigniter

  4. PHP MySQL Google Chart JSON - Ví dụ đầy đủ

  5. Đối tượng TransactionScope có được hỗ trợ đầy đủ bằng MySqlConnector cho .NET không?