MySQL의 숨겨진 기능


15

숨겨진 기능을 가진 오랜 전통에서 MySQL의 숨겨진 기능 목록을 보자.

답변 당 하나의 기능을 사용하십시오.

참고 항목 :
Linux의
숨겨진 기능 PowerShell의
숨겨진 기능 Oracle 데이터베이스의
숨겨진 기능 Windows 2008의
숨겨진 기능 Solaris / OpenSolaris의
숨겨진 기능 SQL Server의
숨겨진 기능 IIS의 숨겨진 기능 (6.0 / 7.0)

답변:


9

자주 사용되지는 않지만 더 장황한

전체 프로세스 목록 표시

편리,하지만 멋진 좋은으로 비 기업 쿼리 분석기 -과 같이 사용 가능

    mysql> 세트 프로파일 링 = 1;
    쿼리 OK, 영향을받는 0 개의 행 (0.00 초)

이 두 가지는 프로파일 테이블을 채우는 정크 쿼리입니다.

        
    mysql> select * from _test.customers;
    오류 1146 (42S02) : '_test.customers'테이블이 존재하지 않습니다

    mysql> select * from test.customers limit 0;
    빈 세트 (0.00 초)
    

프로파일 링 된 모든 쿼리 및 지속 시간 목록을 가져옵니다.

        
    mysql>은 프로파일을 보여준다;
    + ---------- + ------------ + ------------------------- ------ +
    | Query_ID | 기간 | 쿼리 |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | _test.customers에서 *를 선택하십시오 |
    | 2 | 0.01546500 | test.customers에서 *를 선택하십시오 |
    + ---------- + ------------ + ------------------------- ------ +

마지막 검색어에 대한 정보 표시는 "프로필 표시"일뿐입니다. 또는 검색어를 지정할 수 있습니다

  
    쿼리 2에 대한 mysql> show 프로파일;
    + ---------------------- + ---------- +
    | 상태 | 기간 |
    + ---------------------- + ---------- +
    | 시작 | 0.000053 |
    | 권한 확인 | 0.000007 |
    | 테이블 열기 | 0.000014 |
    | 시스템 잠금 | 0.000006 |
    | 테이블 잠금 | 0.000008 |
    | 초기화 | 0.000065 |
    | 최적화 | 0.000003 |
    | 실행 | 0.000201 |
    | 끝 | 0.000003 |
    | 쿼리 끝 | 0.000002 |
    | 품목 풀기 | 0.000020 |
    | 느린 쿼리 로깅 | 0.000002 |
    | 청소 | 0.000004 |
    + ---------------------- + ---------- +
    13 행 세트 (0.00 초)

특히 CPU, BLOCK IO 및 SWAPS와 같은 특정 정보를 요청할 수도 있습니다 ( 모두 맨 페이지에 있음 )

  
    mysql>은 쿼리 2에 대한 프로파일 CPU를 보여줍니다;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 상태 | 기간 | CPU_user | CPU_system |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 시작 | 0.000056 | 0.001000 | 0.000000 |
    | 권한 확인 | 0.000007 | 0.000000 | 0.000000 |
    | 테이블 열기 | 0.000010 | 0.000000 | 0.000000 |
    | 시스템 잠금 | 0.000005 | 0.000000 | 0.000000 |
    | 테이블 잠금 | 0.000007 | 0.000000 | 0.000000 |
    | 초기화 | 0.000059 | 0.000000 | 0.000000 |
    | 최적화 | 0.000003 | 0.000000 | 0.000000 |
    | 통계 | 0.015022 | 0.000000 | 0.000000 |
    | 준비 | 0.000014 | 0.001000 | 0.000000 |
    | 실행 | 0.000004 | 0.000000 | 0.000000 |
    | 데이터 전송 | 0.000245 | 0.000000 | 0.000000 |
    | 끝 | 0.000004 | 0.000000 | 0.000000 |
    | 쿼리 끝 | 0.000002 | 0.000000 | 0.000000 |
    | 품목 풀기 | 0.000021 | 0.000000 | 0.000000 |
    | 느린 쿼리 로깅 | 0.000002 | 0.000000 | 0.000000 |
    | 청소 | 0.000004 | 0.000000 | 0.000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    16 행 세트 (0.00 초)

로깅이 오버 헤드를 추가하므로 나중에 사용하지 않도록 설정하십시오.

  
    mysql> 세트 프로파일 링 = 0;
    쿼리 OK, 영향을받는 0 개의 행 (0.00 초)

SHOW PROFILE ALL FOR QUERY X를 사용하여 모든 프로파일 링 데이터를 표시 할 수도 있습니다.
Kedare

8

항상 일반적으로 알려 지거나 기억되지 않는 일부 MySQL 명령 .

읽기 및 붙여 넣기가 용이하도록 결과 세트 방향을 세로로 변경하십시오.

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

기록에 남기면서 현재 입력중인 쿼리를 취소하십시오.

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

자주 사용하는 $ EDITOR로 쿼리 또는 마지막 쿼리를 편집하십시오.

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

콘솔의 출력을 지우십시오.

mysql> \! clear

MD5 해시로 결과 집합을 비교하십시오.

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

프롬프트를 변경하십시오.

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

주어진 문자열 (예 : Bash)에 대한 명령 기록을 검색하십시오.
검색어를 입력하고 ^ R을 반복하여 결과를 순환하십시오.

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

md5sum에서 +1 나는 md5sum -호출기로 사용 하는 아이디어를 좋아한다 . 실제로 mysql 특정이 아닙니다
serverhorror

4

내가 배운 몇 가지 트릭 :

이전에 저장 한 파일을 실행하려면

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

사용하다 "\!" 쉘 명령에 액세스합니다. 예를 들면 다음과 같습니다.

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

따라서 편집기 옵션을 사용하지 않고 명령문을 파일에 쓰려면 다음을 입력하십시오.

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

입력하면

\\T filename

그러면 지정한 filemame으로 지시문 및 쿼리 결과를 지정 / 인쇄 할 수 있습니다. \\t이것을 끄려면 사용하십시오 .

\\G";"대신 쿼리를 종료하십시오 . 열 대신 행 형식으로 출력을 표시하기 위해.

SHOW 문과 함께 Where ... LIKE 절을 사용하여 배제하지 마십시오. 예를 들면 다음과 같습니다.

SHOW STATUS LIKE '%cache%';

마지막으로 my.cnf파일 사용 을 보지 않고 MySQL 데이터 디렉토리의 위치를 ​​찾으려면 다음을 사용하십시오.

SHOW VARIABLES LIKE 'datadir';

3

나는 개인적으로 SHOW명령을 좋아한다

당신은 할 수 있습니다
SHOW PROCESSLIST-mysql에 실행중인 모든 연결을
SHOW CREATE TABLE TableName보려면
SHOW CREATE PROCEDURE ProcedureName- 테이블 을 만드는 데 사용되는 SQL
SHOW VARIABLES을 보려면 -SP를 만드는 데 사용되는 SQL 을 보려면-모든 시스템 변수를 보려면

전체 목록을 여기에서 얻으십시오


1
SHOW 및 EXPLAIN과 같이 잘 알려져 있고 문서화 된 명령을 "숨겨진 기능"으로 표시하는 것에 약간 의아해합니다. 문서화되지 않은 숨겨진 기능이 아닌가?
John Gardeniers

글쎄, 잘 알려지지 않은 유용한 명령을 내놓으려는 의도가 있습니다. 잘 알려진 것은 다른 사람에게 알려지지 않은 것입니다.
Binoj Antony

3

실제로 문서화 되었지만 매우 성가시다 : 잘못된 데이터에 대한 자동 날짜 변환.

MySQL 5.0.2 이전에, MySQL은 불법적이거나 부적절한 데이터 값을 용서하고 데이터 입력을위한 올바른 값으로 강제합니다. MySQL 5.0.2 이상에서는 기본 동작으로 유지되지만 서버 SQL 모드를 변경하여 잘못된 값에 대한보다 전통적인 처리를 선택하여 서버가이를 거부하고 발생하는 명령문을 중단 할 수 있습니다.

MySQL이 입력을 근처의 유효한 날짜로 조정하지 않고 대신 0000-00-00정의에 따라 유효하지 않은 날짜를 저장하는 경우 "운이 좋을 때"가 있습니다 . 그러나이 경우에도이 값을 자동으로 저장하지 않고 MySQL이 실패하기를 원했을 수도 있습니다.


3

MySQL을 다른 데이터베이스와 차별화하는 또 다른 기능은 REPLACE INTO명령입니다. 넌 할 수있어:

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

update 문을 작성하는 것처럼 replace 문을 작성할 수도 있습니다.

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

1
REPLACE INTO는 유용하지만 키 검사를 수행한다는 점에 유의해야합니다. 일치하는 키가 발견되면 DELETEs, INSERTs ... INSERT ... ON DUPLICATE KEY UPDATE
Andy

2

실제로 숨겨진 기능은 아니지만 덜 알려져 있으며 UPDATE 또는 INSERT를 수행하기 전에 무언가 존재하는지 확인하기 위해 쿼리를 저장하는 데 많이 사용합니다.

INSERT ... ON DUPLICATE KEY UPDATE

설명서는 여기


1

쿼리 실행 계획을 보려면 EXPLAIN

예 :

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

1

실제로 숨기는 것은 아니지만 느린 쿼리 로그 는 사용량이 많은 시간에 성능 문제의 원인을 추적하는 데 실제로 도움이 될 수 있습니다.

파일 my.cnf에서 [mysqld] 섹션-추가 :

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


0

pQD의 답변에 추가 된 것처럼 (누가 아직 주석을 추가 할 수 없습니다) 올바른 my.cnf 파일의 느린 쿼리 로그 경로를 아직 추가하지 않은 경우 오류 로그는 데이터 디렉토리에 쓰여지고 (SHOW VARIABLES LIKE 'datadir';이 위치를 찾으려면) 파일 이름은 [systemname] -slow.log 형식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.