Các tính năng ẩn của MySQL


15

Trong truyền thống lâu đời về việc có các tính năng ẩn, chúng ta hãy có một danh sách các tính năng ẩn trong MySQL.

Đừng đặt một tính năng cho mỗi câu trả lời.

Xem thêm:
Các tính năng ẩn của Linux
Các tính năng ẩn của PowerShell Các
tính năng ẩn của Cơ sở dữ liệu Oracle
Các tính năng ẩn của Windows 2008
Các tính năng ẩn của Solaris / OpenSolaris
Các tính năng ẩn của SQL Server
Các tính năng ẩn của IIS (6.0 / 7.0)

Câu trả lời:


9

Một thường không sử dụng nhưng dài dòng hơn

HIỂN THỊ QUY TRÌNH ĐẦY ĐỦ

là tiện dụng, nhưng không tốt bằng trình phân tích truy vấn phi doanh nghiệp tuyệt vời - kích hoạt như vậy

    mysql đặt profiling = 1;
    Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây)

Đây là hai truy vấn rác để điền vào bảng hồ sơ,

        
    mysql chọn * từ _test.customers;
    LRI 1146 (42S02): Bảng '_test.customers' không tồn tại

    mysql chọn * từ test.customers giới hạn 0;
    Tập rỗng (0,00 giây)
    

Lấy danh sách tất cả các truy vấn được lược tả và thời lượng của chúng

        
    mysql hiển thị hồ sơ;
    + ---------- + ------------ + ------------------------- ------ +
    | Truy vấn_ID | Thời lượng | Truy vấn |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0,00013400 | chọn * từ _test.customers |
    | 2 | 0,01546500 | chọn * từ test.customers |
    + ---------- + ------------ + ------------------------- ------ +

Hiển thị thông tin cho truy vấn cuối cùng sẽ chỉ là "hiển thị hồ sơ" - hoặc bạn có thể chỉ định truy vấn

  
    mysql hiển thị hồ sơ cho truy vấn 2;
    + ---------------------- + ---------- +
    | Tình trạng | Thời lượng |
    + ---------------------- + ---------- +
    | bắt đầu | 0,000053 |
    | kiểm tra quyền | 0,000007 |
    | Mở bàn | 0,000014 |
    | Khóa hệ thống | 0,000006 |
    | Khóa bàn | 0,000008 |
    | init | 0,000065 |
    | tối ưu hóa | 0,000003 |
    | thi công | 0,000201 |
    | kết thúc | 0,000003 |
    | kết thúc truy vấn | 0,000002 |
    | mục miễn phí | 0,000020 |
    | đăng nhập truy vấn chậm | 0,000002 |
    | dọn dẹp | 0,000004 |
    + ---------------------- + ---------- +
    13 hàng trong bộ (0,00 giây)

Bạn cũng có thể yêu cầu thông tin cụ thể như CPU, BLOCK IO và SWAPS trong số những người khác ( tất cả trên trang man )

  
    mysql hiển thị cpu hồ sơ cho truy vấn 2;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | Tình trạng | Thời lượng | CPU_user | Hệ thống CPU |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | bắt đầu | 0,000056 | 0,001000 | 0,000000 |
    | kiểm tra quyền | 0,000007 | 0,000000 | 0,000000 |
    | Mở bàn | 0,000010 | 0,000000 | 0,000000 |
    | Khóa hệ thống | 0,000005 | 0,000000 | 0,000000 |
    | Khóa bàn | 0,000007 | 0,000000 | 0,000000 |
    | init | 0,000059 | 0,000000 | 0,000000 |
    | tối ưu hóa | 0,000003 | 0,000000 | 0,000000 |
    | thống kê | 0,015022 | 0,000000 | 0,000000 |
    | chuẩn bị | 0,000014 | 0,001000 | 0,000000 |
    | thi công | 0,000004 | 0,000000 | 0,000000 |
    | Gửi dữ liệu | 0,000245 | 0,000000 | 0,000000 |
    | kết thúc | 0,000004 | 0,000000 | 0,000000 |
    | kết thúc truy vấn | 0,000002 | 0,000000 | 0,000000 |
    | mục miễn phí | 0,000021 | 0,000000 | 0,000000 |
    | đăng nhập truy vấn chậm | 0,000002 | 0,000000 | 0,000000 |
    | dọn dẹp | 0,000004 | 0,000000 | 0,000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    16 hàng trong bộ (0,00 giây)

Đừng quên vô hiệu hóa nó sau đó, vì đăng nhập thêm chi phí.

  
    mysql đặt profiling = 0;
    Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây)

bạn cũng có thể sử dụng SHOW PROFILE ALL FOR QUERY X để hiển thị tất cả dữ liệu lược tả.
Kedare

8

Một số lệnh MySQL không phải lúc nào cũng được biết đến hoặc ghi nhớ.

Thay đổi hướng đặt kết quả thành dọc để dễ đọc và dán.

mysql> SELECT CURDATE(), CURTIME()\G
*************************** 1. row ***************************
CURDATE(): 2009-06-26
CURTIME(): 12:10:37

Hủy bỏ truy vấn mà bạn hiện đang gõ trong khi để lại nó trong lịch sử của bạn.

mysql> SELECT CURDATE(), CURTIME()\c
mysql>

Chỉnh sửa truy vấn hoặc truy vấn cuối cùng (tương ứng) với $ EDITOR yêu thích của bạn.

mysql> SELECT CURDATE(), CURTIME()\e
mysql> \e

Xóa đầu ra của giao diện điều khiển.

mysql> \! clear

So sánh các tập kết quả bằng hàm băm MD5.

mysql> pager md5sum -
PAGER set to 'md5sum -'
mysql> SELECT CURDATE(), CURTIME();
d24e22e4e2d33dfda9f01ba934b7676a  -
mysql> nopager
PAGER set to stdout

Thay đổi lời nhắc của bạn.

mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(dan@localhost) [test]>

Tìm kiếm lịch sử lệnh của bạn cho một chuỗi nhất định (như Bash).
Bắt đầu nhập cụm từ tìm kiếm và lặp lại ^ R để duyệt qua kết quả.

^R
(reverse-i-search)`DATE': SELECT CURDATE(), CURTIME();

+1 trên md5sum. Tôi thích md5sum -ý tưởng để sử dụng như một máy nhắn tin. Không thực sự là
mys mys

4

Thủ thuật tôi đã học được có thể được sử dụng cho một số:

Để chạy tệp bạn đã lưu trước đó:

source filename      # Alternatively you can enter "\\. filename".

Sử dụng "\!" để truy cập các lệnh shell. Ví dụ:

\\! ls c*sql   # To list all your SQL files in directory starting with "c".

Vì vậy, nếu bạn muốn viết câu lệnh của mình vào một tệp (không sử dụng tùy chọn trình chỉnh sửa), bạn có thể nhập:

\\! echo 'select * from emp where job ="salesman" '   > test2.sql   # Editor option seems easier to me though!

Nếu bạn nhập

\\T filename

Sau đó, bạn sẽ có các câu lệnh và kết quả truy vấn của mình được định hướng / in tới tên tệp bạn đã chỉ định. Sử dụng \\tđể tắt cái này.

Chấm dứt truy vấn \\Gthay vì dấu ";" để hiển thị đầu ra ở định dạng hàng thay vì trong các cột.

Đừng loại trừ bằng cách sử dụng mệnh đề Where ... THÍCH với câu lệnh SHOW. Ví dụ:

SHOW STATUS LIKE '%cache%';

Cuối cùng, để tìm vị trí của thư mục dữ liệu MySQL của bạn mà không cần nhìn vào my.cnftệp sử dụng:

SHOW VARIABLES LIKE 'datadir';

3

Cá nhân tôi thích SHOWlệnh

Bạn có thể làm
SHOW PROCESSLIST- Để xem tất cả các kết nối đang chạy đến mysql
SHOW CREATE TABLE TableName- Để xem sql được sử dụng để tạo bảng
SHOW CREATE PROCEDURE ProcedureName- Để xem sql được sử dụng để tạo SP
SHOW VARIABLES- Để xem tất cả các biến hệ thống

Lấy danh sách đầy đủ ở đây


1
Tôi hơi bối rối khi bạn liệt kê các lệnh được biết và ghi lại như SHOW và EXPLAIN là "các tính năng ẩn". Không phải là một tính năng ẩn mà không được ghi lại?
John Gardeniers

Vâng, ý định là để đưa ra các lệnh hữu ích không được biết đến nhiều, những gì có thể được biết đến với một người khác có thể được biết đến với người khác, những gì nói?
Binoj Antony

3

Trên thực tế được ghi lại , nhưng rất khó chịu: chuyển đổi ngày tự động cho dữ liệu không chính xác.

Trước MySQL 5.0.2, MySQL đã tha thứ cho các giá trị dữ liệu bất hợp pháp hoặc không chính xác và ép buộc chúng thành các giá trị hợp pháp để nhập dữ liệu. Trong MySQL 5.0.2 trở lên, đó vẫn là hành vi mặc định, nhưng bạn có thể thay đổi chế độ SQL của máy chủ để chọn cách xử lý truyền thống hơn cho các giá trị xấu để máy chủ từ chối chúng và hủy bỏ câu lệnh xảy ra.

Đôi khi bạn sẽ "may mắn" khi MySQL không điều chỉnh đầu vào thành các ngày hợp lệ gần đó, nhưng thay vào đó, lưu trữ nó 0000-00-00theo định nghĩa là không hợp lệ. Tuy nhiên, ngay cả khi đó bạn có thể muốn MySQL thất bại thay vì âm thầm lưu trữ giá trị này cho bạn.


3

Một tính năng khác khiến MySQL khác biệt với các cơ sở dữ liệu khác là REPLACE INTOlệnh. Bạn có thể làm:

REPLACE INTO T1 (Col1, Col2 )
SELECT Col1, Col2 FROM T2;

Bạn cũng có thể viết câu lệnh thay thế giống như bạn viết câu lệnh cập nhật:

REPLACE INTO T1 
SET Col1 = 'SomeValue1'
, Col2   = 'SomeValue2'

1
REPLACE INTO rất hữu ích, nhưng cần lưu ý rằng nó thực hiện kiểm tra khóa, XÓA nếu tìm thấy khóa khớp sau đó cuối cùng là CHỨNG MINH, mất nhiều thời gian hơn so với CHỨNG MINH ... TRÊN CẬP NHẬT KHÓA NGHIÊM TRỌNG
Andy

2

Không thực sự là một tính năng ẩn, nhưng nó ít được biết đến hơn và tôi sử dụng nó rất nhiều để lưu thực hiện một truy vấn để kiểm tra xem có cái gì đó tồn tại trước khi thực hiện CẬP NHẬT hoặc CHERTN

INSERT ... ON DUPLICATE KEY UPDATE

Tài liệu ở đây


1

Để xem kế hoạch thực hiện truy vấn sử dụng EXPLAIN

ví dụ

EXPLAIN 
SELECT T1.Col1, T2.Col2
FROM T1 INNER JOIN T2 ON T1.Id = T2.Id
WHERE T1.Col3 = 10

1

Không thực sự bị ẩn, nhưng nhật ký truy vấn chậm có thể thực sự hữu ích trong việc theo dõi nguyên nhân của các vấn đề về hiệu suất vào thời gian cao điểm.

Trong tệp my.cnf, phần [mysqld] - thêm:

log_slow_queries=/var/log/mysql/mysql-slow.log
# log queries that took more than 1 sec
long_query_time = 1


0

Cũng giống như một bổ sung cho câu trả lời của pQD (với tư cách là một người không biết tôi chưa thể thêm nhận xét), nếu bạn chưa thêm đường dẫn đến nhật ký truy vấn chậm trong tệp my.cnf chính xác, nhật ký lỗi sẽ là được ghi vào thư mục dữ liệu (sử dụng SHOW VARIABLES THÍCH 'datadir'; để tìm ra vị trí của nó) và tên tệp sẽ có định dạng [systemname] -slow.log

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.