2010-07-13 42 views
10

Tôi đã thực hiện một số mã và nhận thấy rằng UPDATE LOW_PRIORITYDELAYED INTO được sử dụng để chèn và cập nhật cơ sở dữ liệu. việc sử dụng mã này là gì ?? tại sao chúng ta cần sử dụng cái này ??lợi thế của UPDATE LOW_PRIORITY và INSERT DELAYED INTO

bất kỳ Ý tưởng nào ??

Tôi có cần sử dụng nó trong mọi lần chèn và cập nhật cho các bảng khác nhau trong cùng một cơ sở dữ liệu không ??

Trả lời

19

Với từ khóa LOW_PRIORITY, việc thực thi UPDATE bị trì hoãn cho đến khi không có khách hàng nào khác đang đọc từ bảng. Thông thường, việc đọc các ứng dụng khách sẽ được giữ cho đến khi truy vấn cập nhật được thực hiện. Nếu bạn muốn ưu tiên khách hàng đọc trên truy vấn cập nhật, bạn nên sử dụng LOW_PRIORITY.

Tùy chọn DELAYED cho câu lệnh INSERT là một phần mở rộng MySQL cho SQL chuẩn rất hữu ích nếu bạn có các máy khách không thể hoặc không cần đợi INSERT hoàn thành. Đây là một tình huống phổ biến khi bạn sử dụng MySQL để ghi nhật ký và bạn cũng định kỳ chạy các câu lệnh SELECT và UPDATE mất nhiều thời gian để hoàn thành.

+13

Cũng lưu ý: Kể từ MySQL 5.6.6, INSERT DELAYED không được chấp nhận và bị xóa trong 5.7 – Petah

0

Nếu UPDATE của bạn trên MySQL một môi trường chuyên sâu đọc được dùng nhiều như 1800 giây sau đó nó được khuyến khích sử dụng UPDATE LOW_PRIORITY.

+4

Tại sao 1800 giây? Bạn có thể đã giải thích lý luận của bạn. –

+0

@Dharma đã nói về _ [wait_timeout] (http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_wait_timeout) _ và _ [interactive_timeout] (http: // dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_interactive_timeout)_ biến hệ thống phụ thuộc vào cờ _CLIENT_INTERACTIVE_ của ứng dụng khách. Tuy nhiên, giá trị mặc định của các biến này là 28800 (8 giờ) và không phải là 1800. –

-1

Điều này cần phải sử dụng sau đó bạn có tải trọng lớn trên máy chủ. Và bây giờ bạn có một số UPDATE hoặc INSERT bây giờ là ưu tiên cao và có thể hoạt động khi tải.

Exp. SQL tạo ra một số thống kê hoặc các mục hàng đầu. Các từ từ và không cần thực hiện ngay lập tức.

7

LOW_PRIORITY, HIGH_PRIORITYDELAYED chỉ hữu ích trong một vài circustamces. Nếu bạn không có tải trọng lớn, họ không thể giúp bạn. Nếu bạn có, không làm bất cứ điều gì bạn không hoàn toàn hiểu.

Tất cả các otpions này chỉ hoạt động với MyISAM, chứ không phải InnoDB, không phải lượt xem.

DELAYED không hoạt động với các bảng được phân đoạn và được thiết kế rõ ràng cho nhà dataware. Khách hàng gửi chèn và sau đó quên nó, mà không cần chờ kết quả. Vì vậy, bạn sẽ không biết nếu chèn succeded, nếu có giá trị trùng lặp, vv Nó không bao giờ nên được sử dụng trong khi chủ đề khác có thể SELECT từ bảng đó, bởi vì một chèn chậm là không bao giờ đồng thời.

LOW_PRIORITY đợi cho đến khi NO khách hàng đang truy cập vào bảng. Nhưng nếu bạn có lưu lượng truy cập cao, bạn có thể đợi cho đến khi kết nối hết giờ ... đó không phải là những gì bạn muốn, tôi giả sử :)

Ngoài ra, lưu ý rằng DELAYED sẽ bị xóa trong Oracle MySQL 5.7 (nhưng không phải trong MariaDB)).

Các vấn đề liên quan