> php教程 > PHP开发 > 본문

mysql 명령 요약

高洛峰
풀어 주다: 2016-12-14 10:27:50
원래의
1146명이 탐색했습니다.

1. MySQL에 연결
형식: mysql -h 호스트 주소 -u 사용자 이름 -p 사용자 비밀번호
1. 이 머신에서 MYSQL에 연결합니다.
먼저 DOS 창을 열고 mysqlbin 디렉토리를 입력한 다음 mysql -uroot -p 명령을 입력하세요. Enter 키를 누르면 비밀번호를 입력하라는 메시지가 표시됩니다. MYSQL이 방금 설치된 경우 슈퍼 사용자 루트입니다. 비밀번호가 없으므로 Enter만 누르면 MYSQL을 입력할 수 있습니다. MYSQL 프롬프트는 mysql>입니다.
2. 예시 2: 원격 호스트에서 MYSQL에 연결합니다. 원격 호스트의 IP가 110.110.110.110이고, 사용자 이름이 루트이고, 비밀번호가 abcd123이라고 가정합니다. 그런 다음 다음 명령을 입력합니다:
mysql -h110.110.110.110 -uroot -pabcd123
(참고: u와 root는 공백을 추가할 필요가 없으며 다른 경우에도 마찬가지입니다.)
3. 종료합니다. MYSQL 명령: 종료(Enter ).
2. 비밀번호 변경
형식: mysqladmin -u 사용자 이름 -p 이전 비밀번호 비밀번호 새 비밀번호

1. 예시 1: 루트에 비밀번호 ab12를 추가합니다. 먼저 DOS에서 mysqlbin 디렉터리를 입력한 후 다음 명령을 입력합니다.
mysqladmin -uroot -password ab12
참고: 루트에는 처음에 비밀번호가 없으므로 -p 이전 비밀번호 항목은 생략할 수 있습니다. .
2. 예시 2: 루트 비밀번호를 djg345로 변경합니다.
mysqladmin -uroot -pab12 비밀번호 djg345
3. 새로운 사용자를 추가합니다. (참고: 다음은 위와 달리 MySQL 환경의 명령이므로 명령 종결자로 세미콜론이 뒤에 옵니다.)
형식: grant select on Database.* to username@login 호스트 "password"로 식별됨
예 1: 비밀번호 abc를 사용하여 사용자 test1을 추가하면 이 사용자는 모든 호스트에 로그인하고 모든 데이터베이스에 대한 쿼리, 삽입, 수정 및 삭제 권한을 가질 수 있습니다. 먼저 루트 사용자로 MySQL에 연결한 후 다음 명령을 입력합니다.
grant select,insert,update,
delete on *.* to [email=test2@localhost]test2@localhost[/email] 식별 by " abc";
test2에 비밀번호가 포함되지 않도록 하려면 다른 명령을 입력하여 비밀번호를 제거할 수 있습니다.
mydb에서 선택, 삽입, 업데이트, 삭제 권한 부여
.* ""로 식별되는 [email=test2@localhost]test2@localhost[/email]에게;
로그인, 사용자 추가, 비밀번호 변경 및 기타 문제. MySQL의 데이터베이스 작업을 살펴보겠습니다. 참고: 먼저 MySQL에 로그인해야 합니다. 다음 작업은 MySQL 프롬프트에서 수행되며 각 명령은 세미콜론으로 끝납니다.
1. MySQL 일반 명령
데이터베이스 이름 만들기
데이터베이스 이름 선택
메시지 표시 없이 데이터베이스 이름 삭제
테이블 표시
tablename ; 테이블에 대한 자세한 설명
중복 필드를 제거하려면 선택 항목에 구별 추가
mysqladmin drop 데이터베이스 이름 데이터베이스를 삭제하기 전에 프롬프트가 표시됩니다.
현재 mysql 버전 및 현재 날짜 표시
version(),current_date;
선택 2. mysql에서 루트 비밀번호 수정:
shell>mysql -u root -p
mysql> user set 비밀번호=password(”xueok654123″) user='root';
mysql> 플러시 권한 //데이터베이스 새로 고침
mysql>use dbname; 데이터베이스 열기:
mysql>Show Databases; 모든 데이터베이스
mysql>show tables; mysql 데이터베이스의 모든 테이블을 표시합니다. 먼저 mysql을 사용한 다음
mysql>describe user;
3. grant
어디서든 서버에 연결할 수 있지만 이를 수행하려면 비밀번호를 사용해야 하는 전체 수퍼유저를 만듭니다.
mysql> *.*에 대한 모든 권한을 [email=user@localhost]user@localhost[에게 부여합니다. /email]은
새 사용자 추가
를 사용하여 '무언가'로 식별됩니다. 형식: 데이터베이스에서 선택을 부여합니다.* 사용자 이름@로그인 호스트는 "비밀번호"로 식별됩니다
*.*에 대한 모든 권한 부여: [email= monty@localhost ]monty@localhost[/email] 부여 옵션이 있는 '무언가'로 식별됨
*.*에 대한 모든 권한을 [email=monty@%E2%80%9D%]monty@”%[/에 부여합니다. email]” GRANT OPTION이 포함된 'something'으로 식별;
인증 제거:
mysql> [email=root@%E2%80%9D%]root@”%[/에서 *.*에 대한 모든 권한을 취소합니다. email]” ;
mysql> user="root" 및 호스트="%"인 사용자 삭제;
mysql> 플러시 권한;
사용자 정의를 생성하고 특정 클라이언트 it363.com에 로그인 특정 데이터베이스에 액세스하려면 fangchandb
mysql >fangchandb.*에서 'passwd'로 식별되는 custom@ it363.com에 대한 선택, 삽입, 업데이트, 삭제, 생성, 삭제 권한을 부여하세요.
테이블 이름 바꾸기:
mysql > ; 테이블 t1 이름 변경 t2;
4.mysqldump
데이터베이스 백업
shell> mysqldump -h 호스트 -u root -p dbname >dbname_backup.sql
데이터베이스 복원
mysqladmin - h myhost -u root -p create dbname
shell> mysqldump -h host -u root -p dbname < dbname_backup.sql
테이블 생성 명령만 제거하려는 경우 명령은 다음과 같습니다. 🎜>shell> mysqladmin -u root -p -d 데이터베이스 이름 > a.sql
테이블 명령어를 생성하지 않고 데이터 삽입용 sql 명령어만 언로드하려는 경우 명령어는 다음과 같습니다.
shell> mysqladmin -u root -p -t 데이터베이스 이름 > ; a.sql
그러면 SQL 명령이 아닌 데이터만 원하면 어떻게 해야 합니까?
Mysqldump -T./ phptest 드라이버
그 중 -T 매개변수만 지정하여 일반 텍스트 파일을 언로드할 수 있으며, 이는 데이터를 언로드할 디렉터리를 나타냅니다. ./는 현재 디렉터리를 나타냅니다. mysqldump라는 디렉토리. 드라이버 테이블을 지정하지 않으면 전체 데이터베이스 데이터가 언로드됩니다. 각 테이블은 테이블 생성 실행을 포함하여 두 개의 파일을 생성합니다. 하나는 .sql 파일입니다. 다른 하나는 데이터만 포함하고 SQL 명령은 포함하지 않는 .txt 파일입니다.
5. 쿼리를 파일에 저장하고 키보드 입력을 기다리는 대신 파일에서 쿼리를 읽도록 mysql에 지시할 수 있습니다. 이를 수행하려면 쉘 유형 리디렉션 유틸리티를 사용할 수 있습니다. 예를 들어 my_file.sql 파일에
쿼리가 저장되어 있다면 다음과 같이 쿼리를 실행하면 됩니다.
예를 들어 테이블 생성문을 sql.txt에 미리 작성하고 싶다면
mysql > mysql -h myhost -u root -p Database < sql.txt
1. 설치 환경:
Windows XP
Mysql 4.0.17 다음부터는 mysql -uroot -proot를 사용해야 합니다. 시간 로그인 가능합니다
mysql -h 172.5.1.183 -uroot 를 사용하여 원격 또는 로컬로 로그인할 수 있습니다. 이는 두 번째 줄의 정책에 따라 결정됩니다.
권한 수정이 적용됩니다:
1) net stop mysql
net start mysql
2)c:mysqlbinmysqladmin 플러시-권한
3) mysql에 로그인한 후 플러시 권한 문을 사용
6. 데이터베이스 스태퍼 생성
데이터베이스 스태퍼 생성 ;
7. 다음 명령문은 mysql에 있습니다.
사용자에게 권한이 있는 데이터베이스 표시 show Databases;
직원 데이터베이스로 전환하여 Staffer;
현재 권한이 있는 테이블 표시 데이터베이스 show tables;
테이블 Staffer 구조 표시 desc Staffer
8. 테스트 환경 생성
1) 데이터베이스 Staffer 생성
mysql> 데이터베이스 Staffer 생성
Department, position, Department_pos
create table s_position
(
> id int not null auto_increment,
name varchar(20) not null default 'Manager', #기본값 설정
설명 varchar (100),
기본 키 PK_positon (id) # 기본 키 설정
)
테이블 부서 만들기
(
id int not null auto_increment,
name varchar(20) not null 기본값 '시스템 부서', #기본값 설정
설명 varchar( 100),
기본 키 PK_department(id) #기본 키 설정
);
테이블 생성 출발_pos
(
Department_id int not null,
position_id int not null,
기본 KEY PK_DEPART_POS (department_id, posity_id) # 이력서 및 기본 키 설정
)
테이블 직원 만들기
(
ID NOT NULL Auto_increment 기본 키, # 기본 키 설정 name varchar ( 20) not null default 'Anonymous', # 기본값 설정
Department_id int not null,
position_id int not null,
고유 (department_id,position_id) # 고유 값 설정
);
3)
mysql>
삭제 drop table migration_pos;
drop table Department;
drop table s_position;
drop table Staffer;
drop Database Staffer;
9、 구조 수정
mysql>
#테이블 위치 추가 열 테스트
alter table position add(test char(10));
#테이블 위치 수정 열 테스트
테이블 위치 수정 테스트 char( 20) not null;
#테이블 위치 수정 열 테스트 기본값
테이블 위치 변경 테스트 기본값 '시스템' 설정;
#테이블 위치 제거 테스트 기본값
alter table position alter test drop default ;
#Table position drop 열 test
alter table position drop 열 test;
#Table Depart_pos 기본 키 삭제
테이블 변경 출발_위치 기본 키 삭제;
#테이블 출발_pos 기본 키 추가
변경 테이블 출발_pos 기본 키 추가 PK_depart_pos (department_id,position_id);
10. 작업 데이터
#테이블 부서 삽입
부서(이름, 설명) 값에 삽입(' 시스템 부서','시스템 부서');
부서(이름,설명) 값에 삽입('홍보 부서','홍보 부서');
부서(이름,설명) 값에 삽입(' 고객 서비스 부서' ,'고객 서비스 부서');
부서(이름,설명) 값에 삽입('재무 부서','재무 부서');
부서(이름,설명) 값에 삽입(' 테스트 부서',' 테스트 부서');
#Insert table s_position
insert into s_position(name,description) value('Director','Director');
insert into s_position(name,description) 값('관리자' ,'관리자');
s_position(이름,설명)에 삽입합니다. Department_id,position_id)
부서 a,s_position b에서 a.id Department_id,b.id position_id
선택;
#Insert table Staffer
insert into Staffer(name,department_id,position_id) 값(' Chen Dazhi',1,1 );
직원(이름,department_id,position_id)에 삽입 값('Li Wenbin',1,2);
직원(이름,department_id,position_id)에 삽입 값(' Ma Jia',1,3) ;
직원(이름,department_id,position_id) 값에 삽입('Kang Zhiqiang',5,1);
직원(이름,department_id,position_id) 값에 삽입(' 양유루',4,1);
11. 조회 및 삭제 작업
#시스템 부서 인사 및 직위 표시
직원에서 a.name,b.name 부서_이름,c.name position_name
선택 a,department b,s_position c
여기서 a.department_id=b.id 및 a.position_id=c.id 및 b.name='시스템 부서';
#시스템 부서의 인원 수 표시
직원 a, 부서 b에서 개수(*) 선택
여기서 a.department_id=b.id 및 b.name='시스템 부서'
#각 부서의 인원 수 표시
개수 선택 (*) cou,b.name
from 직원 a,department b
여기서 a.department_id=b.id
group by b.name;
#Delete Customer Service Department
delete from Department where name='Customer Service Department';
#Modify the Finance Department For Finance Department
update Department set name='Finance Department' where name='Finance Department';
백업 및 복구
데이터베이스 백업 Staffer
c:mysqlbinmysqldump -uroot -proot Staffer> ;e:staffer.sql
획득한 Staffer.sql은 SQL 스크립트로 데이터베이스 구축을 위한 구문이 포함되어 있지 않으므로, 가져오기 전에 수동으로
데이터베이스를 생성하세요
Staffer 데이터베이스를 복원하려면 빈 데이터베이스 Staffer를 생성해야 합니다
c:mysqlbinmysql -uroot -proot Staffer 나중에 직원을 수동으로 생성하고 싶지 않다면
c:mysqlbinmysqldump -uroot -proot --databases Staffer>e:staffer.sql
mysql -uroot -proot >e:staffer.sql
을 수행할 수 있습니다. 이 경우 Staffer 라이브러리는 시스템에 존재할 수 없으며 다른 이름의 데이터베이스를 가져올 수 없습니다.
물론 Staffer.sql 파일을 수동으로 수정할 수 있습니다
13. 텍스트에서 데이터베이스로 데이터 가져오기
1) c:mysqlbinmysqlimport 도구를 사용하세요
이 도구의 기능은 파일 확장자와 동일한 이름을 가진 테이블로 파일을 가져오는 것입니다(예:
Staffer.txt, Staffer 모두 Staff 테이블
공통 옵션 및 기능은 다음과 같습니다.
-d 또는 --delete 새 데이터를 데이터 테이블로 가져오기 전에 데이터 테이블의 모든 정보를 삭제합니다.
-f 또는 --force 여부에 관계없이 오류가 발생하면 mysqlimport는 강제로 데이터를 계속 삽입합니다.
-i 또는 --ignore mysqlimport는 동일한 고유
키워드가 있는 행을 건너뛰거나 무시하고 가져온 파일의 데이터는 무시됩니다.
-l 또는 -lock-tables는 데이터가 삽입되기 전에 테이블을 잠가서 데이터베이스를 업데이트할 때
사용자 쿼리 및 업데이트가 영향을 받지 않도록 합니다.
-r 또는 -replace 이 옵션은 -i 옵션과 반대 효과를 갖습니다. 이 옵션은
을 대체합니다.테이블에 동일한 고유 키를 가진 레코드가 있습니다.
--fields-enclosed- by= char
텍스트 파일에서 데이터 레코드를 묶는 방법을 지정합니다. 대부분의 경우
data는 큰따옴표로 묶입니다. 기본적으로 데이터는 문자로 묶이지 않습니다.
--fields-terminating-by=char
는 각 데이터 값 사이의 구분 기호를 지정합니다. 마침표로 구분된 파일에서
구분 기호는 마침표입니다. 이 옵션을 사용하여 데이터 사이의 구분 기호를 지정할 수 있습니다.
기본 구분 기호는 Tab입니다.
--lines-terminating-by=str
이 옵션은 텍스트 파일에서 줄 사이의 데이터를 구분하는 문자열
또는 문자를 지정합니다. 기본적으로 mysqlimport는 개행 문자를 줄 구분 기호로 사용합니다.
단일 문자를 문자열(
새 줄 또는 캐리지 리턴)으로 바꾸도록 선택할 수 있습니다.
mysqlimport 명령에서 일반적으로 사용되는 옵션에는 버전(version)을 표시하는 -v,
비밀번호(password)를 묻는 -p 등이 있습니다.
이 도구에는 무시할 수 없는 문제가 있습니다. 이로 인해 데이터 가져오기에 많은 문제가 발생합니다.
이 필드를 수동으로 설정할 수도 있지만 설명할 수 없는 결과가 발생합니다. 간단한 예
다음과 같이 Department_no.txt를 정의하고 e 드라이브에 저장하며 간격은 탭 문자 t
10 10
11 11
12 24
다음 명령을 실행합니다.
c:mysqlbinmysqlimport - uroot -proot Staffer e:depart_pos.txt
여기에는 열 대괄호 기호가 사용되지 않으며, 다른 기호를 사용하면 문제가 발생할 수 있으므로 나누기에는 기본 t가 사용됩니다.
Windows 때문인지는 모르겠습니다.
2 )Load Data INFILE file_name into table_name(column1_name,column2_name)
이 명령은 mysql> 프롬프트에서 사용됩니다. 예는 다음과 같습니다
c:mysqlbinmysql -uroot -proot Staffer
mysql> "e:/depart_no.txt" 파일에 데이터를 로드합니다.
이 두 도구는 다음과 같은 경우에 문제가 있습니다. Windows 문제인지 중국 문제인지 모르겠습니다.
그리고 지정된 열에 대해 null 값이 생성되는데 이는 분명히 우리가 원하는 것이 아니므로 다음을 사용하십시오. 주의하세요
MySQL 입력: mysql -user -ppassword --port=3307
1: SHOW 문을 사용하여 서버에서 무슨 일이 일어나고 있는지 알아보세요. 현재 존재하는 데이터베이스:
mysql> ;
2:2. 데이터베이스 MYSQLDATA 생성
3: 생성한 데이터베이스를 선택합니다.
mysql> 작업 성공!)
4: 현재 데이터베이스에 어떤 테이블이 있는지 확인
mysql> SHOW TABLES;
5: 데이터베이스 테이블 생성
mysql> TABLE MYTABLE(이름 VARCHAR(20), *** CHAR(1));
6: 테이블 구조 표시:
mysql> DESCRIBE MYTABLE;
7: 테이블에 레코드 추가
mysql> ("hyq", "M");
8: 텍스트 모드로 데이터베이스 테이블에 데이터를 로드합니다(예: D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE "D:/mysql. txt" INTO TABLE MYTABLE;
9: .sql 파일 가져오기 명령(예: D:/mysql.sql)
mysql>use 데이터베이스;
mysql>source d:/mysql .sql;
10: 테이블 삭제
mysql>drop TABLE MYTABLE;
11: 테이블 지우기
mysql>MYTABLE에서 삭제;
12: 테이블의 데이터 업데이트
mysql>update MYTABLE 세트 ** *="f" where name='hyq';
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ ORDER BY ...]
[LIMIT 행]
또는
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]
SET col_name1=expr1 [, col_name2= expr2 ... ]
[WHERE where_definition]
UPDATE는 기존 테이블 행의 열을 새 값으로 업데이트합니다. SET 절은 수정할 열과 해당 열에 제공되어야 하는 값을 나타냅니다. WHERE
절이 제공되면 업데이트해야 할 행을 지정합니다. 그렇지 않으면 모든 행이 업데이트됩니다. ORDER BY 절을 지정하면 지정된 순서대로 행이 업데이트됩니다.
LOW_PRIORITY 키워드를 지정하면 다른 클라이언트가 테이블을 읽지 않을 때까지 UPDATE 실행이 지연됩니다.
IGNORE 키워드를 지정하면 업데이트 과정에서 중복 키 오류가 발생하더라도 업데이트 문이 비정상적으로 중단되지 않습니다. 충돌을 일으키는 행은 업데이트되지 않습니다.
표현식의 tbl_name에서 열에 액세스하면 UPDATE는 해당 열의 현재 값을 사용합니다. 예를 들어, 다음 문은 age 열 값을 현재 값에 1을 더한 값으로 설정합니다.
mysql> UPDATE persondata SET age=age+1;
UPDATE 할당은 왼쪽에서 오른쪽으로 평가됩니다. 예를 들어 다음 문은 age 열을 해당 값의 두 배로 설정한 다음 1을 추가합니다.
mysql> UPDATE persondata SET age=age*2, age=age+1;
열을 다른 값으로 설정하는 경우 현재 값에서는 MySQL이 이를 인지하고 업데이트하지 않습니다.
UPDATE는 변경된 행의 실제 개수를 반환합니다. MySQL 3.22 이상에서는 C API 함수 mysql_info()
가 일치하여 업데이트된 행 수와 UPDATE 중에 발생한 경고 수를 반환합니다.
MySQL 3.23에서는 LIMIT #을 사용하여 지정된 행 수만 변경되도록 할 수 있습니다.
ORDER BY 절을 사용하면(MySQL 4.0.0부터 지원) 지정된 순서대로 행이 업데이트됩니다. 이는 LIMIT
과 함께 사용하는 경우에만 유용합니다.
MySQL 4.0.4부터 여러 테이블이 포함된 UPDATE 작업을 수행할 수도 있습니다.
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id ;
참고: 다중 테이블 UPDATE에는 ORDER BY 또는 LIMIT를 사용할 수 없습니다.
키워드: mysql
시작: net start mySql;
입력: mysql -u root -p/mysql -h localhost -u root -p DatabaseName;
데이터베이스 목록: show Databases;
데이터베이스 선택:
테이블 나열: 테이블 열 표시: tableName의 열 표시 임의의 문자를 나타내려면 와일드카드 문자 _를 사용하고 임의의 문자열을 나타내려면 %를 사용하십시오. 필드: alter table tabelName add 열 fieldName dateType;
여러 필드 추가: alter table tabelName add 열 fieldName1 dateType, 추가 열 fieldName2 dateType
여러 줄 명령 입력: 또는 삽입 시 단어를 끊지 않도록 주의하세요. 데이터를 변경하면 필드 문자열을 여러 줄로 확장할 수 없습니다. 그렇지 않으면 하드 리턴이 데이터에 저장됩니다.
하나의 관리자 계정 추가: *.*에 대한 모든 권한을 [email=user@localhost]user@에 부여합니다. "password"로 식별되는 localhost[/email];
각 문을 입력한 후 끝에 ';'을 추가하거나 'g'를 추가할 수 있습니다.
쿼리 시간: 지금(); 현재 사용자 쿼리: select user();
데이터베이스 버전 쿼리: select version();
현재 사용된 데이터베이스 쿼리: select Database();
1. Student_course 데이터베이스에서 학생 데이터 테이블을 삭제합니다.
rm -f Student_course/students.*
2. 데이터베이스 백업: (데이터베이스 테스트 백업)
Mysqldump -u root -p test>c:test.txt
백업 테이블: ( 테스트 데이터베이스 아래 mytable 테이블 백업)
mysqldump -u root -p test mytable>c:test.txt
백업 데이터를 데이터베이스로 가져오기: (테스트 데이터베이스로 다시 가져오기)
mysql - u root -p test
3. 임시 테이블 생성: (create temporary table zengchao)
create temporary table zengchao(name varchar(10) );
4. 테이블을 생성하려면 먼저 테이블이 있는지 확인합니다. 존재합니다
존재하지 않는 경우 테이블 생성(…); select * from table1 where 1<>1;
6. 테이블 복사
테이블 생성 table2 select * from table1;
7. 이름을 바꿉니다. table
alter table table1 rename as table2;
8. 열 유형 수정
Alter table table1 수정 id int unsigned; // 열 id 유형을 int unsigned로 수정
Alter table table1change id sid int unsigned; // id 컬럼의 이름을 sid로 수정하고, 속성을 int unsigned로 변경합니다
9. 인덱스 생성
alter table table1 add index ind_id(id)
create index ind_id on; table1 (id);
table1에 고유 인덱스 ind_id 생성(id );//고유 인덱스 생성
10. 인덱스 삭제
table1에 인덱스 idx_id 삭제
alter table table1 drop index ind_id; ":"와 컬럼명 "="가 연결됩니다)
학생 중에서 concat(id,':',name,'=') 선택;
12. 제한(10~20개 항목 선택)< 레코드 세트 수는 0>
ID 제한으로 학생 주문에서 * 선택 9,10;
13. MySQL에서 지원하지 않는 기능
트랜잭션, 뷰, 외래 키 및 참조 무결성, 저장 프로시저 및 트리거
14. MySQL은 인덱스 연산 기호를 사용합니다
, 인덱스 사용의 단점
1) 데이터 추가, 삭제, 수정 속도가 느려집니다.
2) 디스크 공간을 차지합니다. 쿼리 최적화 프로그램의 부담이 늘어납니다.
쿼리 최적화 프로그램이 실행 계획을 생성할 때 인덱스가 너무 많으면 쿼리 최적화 프로그램의 작업 부하가 증가하여 최적의 쿼리 계획을 선택할 수 없게 됩니다.
16. 지수 효율성 분석
방법: 일반 SQL 문 앞에 explain을 추가합니다.
분석 결과의 의미:
1) 테이블: 테이블 이름
2) 유형: 연결 유형(ALL/Range/Ref). 그 중 ref가 가장 이상적입니다.
3) available_keys: 사용할 수 있는 인덱스 이름을 쿼리합니다.
4) key: 실제 사용되는 인덱스입니다.
5) key_len: 사용되는 부분의 길이입니다. 인덱스(바이트);
6) ref: 열 이름 또는 "const"를 표시합니다(무슨 뜻인지 모르겠습니다).
7) 행: MySQL이 스캔해야 한다고 생각하는 행 수를 표시합니다. 올바른 결과를 찾기 전에
8) 추가: MySQL의 제안
17. 더 짧은 고정 길이 열을 사용하십시오.
1) 가능한 한 더 짧은 데이터 유형을 사용하십시오.

a) varchar 대신 char를 사용하면 고정 길이 데이터 처리가 가변 길이 데이터보다 빠릅니다.
b) 자주 수정되는 테이블의 경우 디스크가 조각화되기 쉬우므로 영향을 미칩니다. 데이터베이스의 전반적인 성능
c) 데이터 테이블이 충돌하는 경우 고정 길이 데이터 행이 있는 테이블을 재구성하기가 더 쉽습니다. 고정 길이 데이터 행을 사용하면 각 레코드의 시작 위치가 고정 레코드 길이의 배수이므로 쉽게 감지할 수 있지만 가변 길이 데이터 행을 사용하는 것이 반드시 그런 것은 아닙니다.
 d) MyISAM 유형의 경우 데이터 테이블을 고정 길이 데이터 열로 변환하면 성능이 향상될 수 있지만 공간도 많이 차지합니다.
18. not null 및 enum 사용
열을 not null로 정의하여 데이터가 더 효율적으로 출력할 수 있고, 더 적은 공간을 필요로 하며, 쿼리할 때 MySQL은 특별한 경우, 즉 null 값이 있는지 확인할 필요가 없으므로 쿼리를 최적화합니다.
성별 등 특정 값의 개수, 유효 여부, 연도 등. 이 경우 모든 열거형 값이 식별로 표현되므로 MySQL은 이를 더 빠르게 처리하는 것을 고려해야 합니다.
 19. 최적화 테이블 사용
자주 수정되는 테이블의 경우 조각화가 발생하기 쉽기 때문에 데이터베이스 쿼리 시 더 많은 디스크 블록을 읽어야 하므로 쿼리 성능이 저하됩니다. 가변 길이의 테이블은 디스크 조각화 문제가 발생하기 쉽습니다. 이 문제는 크기가 크게 달라지는 Blob 데이터 유형에서 더욱 두드러집니다. 테이블 최적화를 사용하여 조각 모음을 수행하여 데이터베이스 성능이 저하되지 않도록 하고 조각화의 영향을 받는 데이터 테이블을 최적화할 수 있습니다. 최적화 테이블은 MyISAM 및 BDB 유형 데이터 테이블에 사용할 수 있습니다. 실제로 조각 모음 방법은 mysqldump를 사용하여 데이터 테이블을 덤프한 다음 덤프된 파일을 사용하여 데이터 테이블을 다시 작성하는 것입니다.
 20. 프로시저 분석() 사용
프로시저 분석()을 사용하여 표시할 수 있습니다. 최고의 유형 제안은 사용이 매우 간단합니다. select 문 뒤에 프로시저 분석()을 추가하면 됩니다. 예:
select * from Students Procedure analyze();
select * from Students Procedure analyze(16,256);
두 번째 문에서는 16개 이상의 값 또는 256바이트를 초과하는 열거형 유형을 권장하지 않도록 프로시저 analyze()가 필요합니다.
21. 쿼리 캐시를 사용하세요. 🎜> 1) 쿼리 캐시 작동 방식:
Select 문이 처음 실행될 때 서버는 쿼리의 텍스트 내용과 쿼리 결과를 기억하고 다음에 이 문을 만날 때 이를 캐시에 저장합니다. , 결과는 캐시에서 반환됩니다. 데이터 테이블이 업데이트되면 해당 데이터 테이블에 대해 캐시된 쿼리가 모두 무효화되고 삭제됩니다.
2) 캐시 매개변수 구성:
변수: query_cache _type, 쿼리 캐시 작동 모드. 3가지 모드가 있습니다. 0: 캐싱 없음, 1: select sql_no_cache로 시작하지 않는 한 쿼리 캐시, 2: 필요에 따라 select sql_cache로 시작하는 쿼리만 캐시, query_cache_size: 이 값과 비교하여 쿼리 캐시의 최대 결과 집합 크기를 설정합니다. 큰 파일은 캐시되지 않습니다.
22. 하드웨어 조정
1) 머신에 더 많은 메모리를 설치합니다.
2) I/O 대기 시간을 줄이기 위해 더 빠른 하드 디스크를 추가합니다.
탐색 시간은 성능을 결정하는 주요 요소입니다. 헤드를 한 단어씩 이동하는 것이 가장 느리며, 일단 헤드가 배치되면 트랙에서 읽는 것이 매우 빠릅니다.
3) 디스크 활동을 다른 물리적 하드 디스크 장치에 재분배합니다.
가능하면 가장 바쁜 것이 좋습니다. 데이터베이스는 서로 다른 물리적 장치에 저장됩니다. 이는 동일한 물리적 리소스(헤드)를 놓고 경쟁하기 때문에 동일한 물리적 장치에서 서로 다른 파티션을 사용하는 것과 다릅니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿