2014-07-11 13 views
7

Có thể gán mức ưu tiên thấp hơn cho truy vấn trong MySQL tương tự như lệnh nice trên dòng lệnh (trong Linux) không? Nếu không, có cơ sở dữ liệu nào có thể làm điều gì đó như thế không?Truy vấn có mức ưu tiên thấp trong Mysql

+0

Bạn muốn giải quyết vấn đề nào? – VMai

+0

MySQL đã ngược lại: _HIGH_PRIORITY cho phép mức độ ưu tiên cao hơn SELECT so với câu lệnh cập nhật bảng. Bạn chỉ nên sử dụng cho các truy vấn rất nhanh và phải được thực hiện cùng một lúc. Một truy vấn SELECT HIGH_PRIORITY được phát hành trong khi bảng bị khóa để đọc chạy ngay cả khi có một câu lệnh cập nhật đang chờ bàn miễn phí. Điều này chỉ ảnh hưởng đến các công cụ lưu trữ chỉ sử dụng khóa cấp bảng (chẳng hạn như MyISAM, MEMORY và MERGE) ._ nguồn: trang thủ công của [SELECT] (https://dev.mysql.com/doc/refman/5.6/en /select.html) – VMai

Trả lời

11

Bạn có thể sử dụng LOW_PRIORITY hoặc HIGH_PRIORITY trong các truy vấn của bạn tùy thuộc vào loại truy vấn mà bạn thực hiện:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] INTO ... 
SELECT [HIGH_PRIORITY] * FROM ... 
UPDATE [LOW_PRIORITY] table ... 

Từ Mysql 5.7 documentation cho truy vấn INSERT ví dụ:

Nếu bạn sử dụng Từ khóa LOW_PRIORITY, việc thực thi INSERT bị trì hoãn cho đến khi không có khách hàng nào khác đọc từ bảng. Điều này bao gồm các khách hàng khác bắt đầu đọc trong khi các khách hàng hiện có đang đọc và trong khi câu lệnh INSERT LOW_PRIORITY đang đợi. Do đó, có thể, đối với một khách hàng phát hành câu lệnh INSERT LOW_PRIORITY để chờ một thời gian rất dài.

Nhưng nó cũng cho biết:

này chỉ ảnh hưởng đến công cụ lưu trữ mà chỉ sử dụng bảng cấp khóa (ví dụ như MyISAM, bộ nhớ, và MERGE)

Vì vậy, bạn thắng' t có thể sử dụng chức năng này với ví dụ innodb, trừ khi bạn muốn sử dụng LOCK_TABLES và do đó làm giảm hiệu suất của nó.

+0

Tôi [chỉ đọc ở đây trên dba stackexchange] (http://dba.stackexchange.com/a/56379/8378) rằng một truy vấn LOW_PRIORITY có thể không bao giờ chạy nếu DB của bạn luôn bận rộn chạy bình thường hoặc Truy vấn HIGH_PRIORITY ... vì vậy hãy suy nghĩ về thức ăn! –

+0

Câu trả lời này cho biết bạn có thể sử dụng LOW_PRIORITY cho INSERT, SELECT và UPDATE. Ít nhất là MySQL 5.7, tùy chọn này không có sẵn cho các câu lệnh SELECT. Xem https://dev.mysql.com/doc/refman/5.7/en/select.html – ChrisInEdmonton

+0

@ChrisInEdmonton Cảm ơn, tôi đã sửa câu trả lời của mình. Không thể có 'LOW_PRIORITY' trên các truy vấn' SELECT' (và không chỉ trong 5.7), [nhưng 'HIGH_PRIORITY' là] (https://dev.mysql.com/doc/refman/5.7/en/select.html) – julienc

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