앞에 쓰기: 규칙이 없는 원은 없습니다. 이제 막 인터넷에 접속하신 분들은 반드시 MySQL, MySQL인터넷에서 가장 인기 있는 관계형 데이터베이스 제품으로서 장단점이 있으며, 그 특성을 대부분의 인터넷 애플리케이션의 특성과 결합하여 저자는 다년간의 인터넷 회사에서의 경험을 바탕으로 설명합니다. MySQL DBA 경험을 바탕으로 이제 인터넷MySQL의 일부 개발 사양을 참고용으로 요약합니다. .
1. 기본사양 (1)
사용INNODB스토리지 엔진
(2)
테이블 문자 집합은 UTF8
을 사용합니다(3)
모든 테이블에 코멘트 추가 필요
(4)
단일 테이블의 데이터 양을 조절하는 것이 좋습니다 5000W
(5)
이내 그래프를 데이터베이스에 저장⽚, 파일 및 기타 빅데이터
(6)
온라인으로 데이터베이스 스트레스 테스트를 수행하는 것은 금지되어 있습니다
(7)
금지 ⽌테스트 및 개발 환경에서 데이터베이스에 직접 연결
2. 명명 사양 (1)
라이브러리 이름, 테이블 이름 및 필드 이름은 12 문자 내에서 (2)
라이브러리 이름, 테이블 이름, 필드 이름은 금지됩니다. ⽌ 은 32자를 초과합니다. 이름의 의미를 꼭 보세요(3)
라이브러리명, 테이블명, 필드명 금지 ⽌중지⽤사용 MySQL예약어(4)
임시 라이브러리 및 테이블 이름은 다음과 같아야 합니다. tmp로 시작하고 앞에 ⽇ 날짜를 붙입니다. 접미사입니다
(5) 백업 라이브러리와 테이블 앞에는 bak가 붙어야 하며 날짜는 접미사
3. 라이브러리, 테이블, 현장 개발 및 설계 사양
(1) 금지⽌ 파티션 테이블을 사용하여
(2) 큰 필드와 액세스 빈도가 낮은 필드를 분할하고 핫 데이터와 콜드 데이터를 분리합니다.
(3) HASH를 사용하여 ⾏스캐터 테이블, 테이블 이름 접미사는 ⽤⼗ 기본 번호, 0
( 4) 날짜 및 시간별 표는 YYYY[MM][DD][HH] 형식을 준수해야 합니다.
(5) 적절한 샤딩 전략을 채택하세요. 예를 들어 Qianku Ten Tables, Shiku Hundred Tables 등
(6) 사용하지 마세요TEXT, BLOBTYPE
(7) 을 DECIMAL으로 바꾸세요. 🎜>FLOAT 및 DOUBLE정확한 부동 소수점 숫자 저장
(8) 단순할수록 좋습니다. 문자를 숫자로 변환하고 대신 TINYINT를 사용하세요. >ENUM
유형
(9) 모든 필드는 다음과 같이 정의됩니다.
NULL이 아님(10) UNSIGNED 사용
음수가 아닌 정수 저장
(11) INT고정 직업 유형4
바이트 저장 (12) 사용 타임스탬프
시간 저장
(13) 사용 INT UNSIGNED저장소
IPV4(14) 사용 VARBINARY
저장 대소문자를 구분하는 가변 길이 문자열
(15) 데이터베이스에 일반 텍스트 비밀번호를 저장하는 것은 금지되어 있으며, 비밀번호는 암호화하여 저장해야 합니다.
(16) 숫자형 필드를 잘 활용하세요
Tinyint(1Byte)
smallint(2Byte)
mediumint(3Byte)
int(4Byte)
bigint (8바이트)
|
바이트 최소값 최대값
|
| (서명됨/서명되지 않음) |
(서명됨/서명되지 않음) |
TINYINT |
1 |
-128 |
127 | tr> 서명 없음 |
| 0 |
255 |
SMALLINT |
2 | -32768 |
32767 | tr>서명 없음 |
0 | 65535 |
3-8388608 |
8388607 | 서명 없음 |
td> |
0 |
16777215 |
내부 |
4 |
-2147483648 |
2147483647 td> |
서명 없음 |
0 | 4294967295 td> |
빅인트 |
8 |
-9223372036854775808 |
9223372036854775807 |
서명 없음 |
| 0 |
18446744073709551615 | tr>테이블>
숫자 필드가 그다지 크지 않으면 bigint
를 사용하지 마세요. (17) 저장공간ip사용하기 가장 좋음 int는 char(15)
(18) 은 허용되지 않습니다 ENUM
(19) 사용하지 마세요 NULL 필드
NULL 필드는 쿼리 및 최적화가 어렵습니다. NULL 필드의 인덱스에 추가 공간이 필요합니다. NULL 필드의 복합 인덱스가 유효하지 않습니다.
(20) 절대로 사용 text/blob, varchar의 성능은 text보다 훨씬 높을 것입니다. 정말 어쩔 수 없는블롭테이블을 나눠주세요
(21) 대용량 파일이나 사진은 데이터베이스에 저장할 수 없습니다. 대용량 파일은 데이터베이스에 저장할 수 있으며, 해당 개체의 경로는 데이터베이스에 저장됩니다.
4. 인덱스 사양
1, 인덱스 수를 제어해야 합니다.
( 1) 한 개의 인덱스 수 테이블은 5
(2) 을 초과하지 않아야 합니다. 단일 인덱스의 필드 수는 5
(3)문자열 Index에 ⽤ 접두사를 사용하세요. 접두사 색인의 길이는 8자 (4)
을 권장합니다. 필요한 경우 의사 열을 추가하고 인덱스를 생성할 수 있습니다2, 기본 키 지침
(1) 테이블에 기본 키가 있어야 합니다
(2) 자주 업데이트되는 열을 기본 키로 사용하지 마세요
(3) 문자열 열을 기본 키로 선택하지 마세요. 기본 키
(4)
UUID MD5 HASH를 사용하지 마세요. 기본 키(값이 너무 불연속적임)
(5) 기본값은 ⽤ 비어 있지 않은 고유 키 기본 키로
(6) auto-increment 또는 issuer를 선택하는 것이 좋습니다
3, 중요 SQL은 다음과 같이 색인화되어야 합니다.
(1) UPDATE, DELETE문의 WHERE 조건열
(2) ORDER BY, GROUP BY, DISTINCT 필드
4, 다중 테이블 JOIN 필드는 다음과 같이 주의해야 합니다.
(1) 차이가 가장 큰 필드를 앞에 배치
(2) Core⼼SQL포함 인덱스 우선
( 3) 중복 및 중복 인덱스 방지
(4) 인덱스는 데이터 밀도와 분포를 종합적으로 평가하고 쿼리 및 업데이트 비율을 고려해야 합니다
5, 인덱스 금기
(1) "성별"과 같이 낮은 카디널리티 열에 대해 색인을 생성하지 마십시오.
( 2) 인덱스 열에 수학 연산 및 함수 연산을 수행하지 마세요
6, 시도하지 마세요 외래 키 사용
(1) 외래 키는 참조 무결성을 보호하는 데 사용되며 비즈니스 측면에서 구현될 수 있습니다
(2 ) 상위 테이블과 하위 테이블에 대한 작업이 서로 영향을 미치므로 가용성이 줄어듭니다.
7, 인덱스 이름 지정: 고유하지 않은 인덱스는 idx_field1_필드 2는 이름이 고유하므로 로 이름을 지정해야 합니다. uniq_ 필드1_필드2 이름 지정 시 인덱스 이름은 모두 소문자여야 합니다
8. 새로 생성된 고유 인덱스는 기본 키와 중복되어서는 안 됩니다. 🎜>
9, 인덱스 필드의 기본값은 NULL일 수 없으며 변경해야 합니다. 다른 것으로기본값 또는 비어 있습니다. NULL인덱스 쿼리 효율성에 많은 영향을 미칩니다
10 , 해당 테이블과 관련된 SQL을 반복적으로 확인하고, 가장 왼쪽 접두사의 특성을 기반으로 인덱스를 구축합니다. 여러 개의 반복 필드가 있는 명령문의 경우 명령문 조건 필드의 순서를 수정하고 이에 대한 공동 인덱스를 생성하고 인덱스 수를 줄여야 합니다
11 , 고유 인덱스를 사용할 수 있다면 쿼리 효율성을 높이기 위해 고유 인덱스를 사용해야 합니다
12, R&D에서는 자주 사용해야 합니다 설명, 인덱스 선택성이 좋지 않다고 판단되면 사용법을 익히도록 해야 합니다 힌트
SQL사양
(1) sql 명령문은 최대한 간단하게
큰 sql분할 방법을 찾아보세요. 작은 sql문장(최대한 활용QUERY CACHE멀티 코어를 최대한 활용 CPU)
(2) 거래는 단순해야 하며 전체 거래 기간은 너무 길지 않아야 합니다
(3) 트리거, 함수, 저장 프로시저 사용을 피하세요
(4 ) 업무 결합을 줄이고 sacle out, sharding 을 위한 공간 확보
(5) 데이터베이스에 입력하지 마세요 ⾏수학적 연산(MySQL수학적 연산이나 논리적 판단을 잘 못함)
(4) 선택 *을 사용하지 마세요. 쿼리할 필드는 입니다. 이 필드
(5) sql OR는 에서 IN()(또는은 )
(6) 의 숫자 개수는 1000 이내로 조절하는 것이 좋습니다. 🎜>
(7) 제한페이징 효율성에 주의하세요. 한도크기가 클수록 효율성이 떨어집니다. limit를 다시 작성할 수 있습니다. 예를 들어 예를 다시 작성할 수 있습니다.
select id fromtlimit 10000, 10; => ; id > 10000 제한10;
(9) 사용 Union allunion바꾸기(10)
사용하지 마세요 ⽤큰 테이블JOIN(11)
그룹별을 사용하여 그룹화하고 자동 정렬 (12)
데이터 업데이트는 분할하여 일괄 업데이트해야 합니다.(13) )
데이터베이스와의 상호 작용 횟수 줄이기(13)
사용에 주의 성능 분석 도구Sql explain / showprofile / mysqlsla
(14) SQL
문에는 R&D가 모두 필요합니다. SQL키워드는 모두 대문자이며, 각 단어에 공백 하나만 허용됩니다 (15) SQL
문은 table where id='1'(16) IN
조건에 들어가는 데이터의 개수가 적어야 한다는 것을 기억합니다. 하나 내에서
500이어야 합니다. 대신 exist를 사용하는 방법을 배워야 합니다. in, exist 일부 시나리오에서는 쿼리가 에서(17)필요하지 않은 경우 있습니다
NOT IN필요하지 않은 경우NOTIN 있습니다. 함정이 너무 많습니다. . null 및 NULL(18)
SQL 문에서 금지되는 접두사는 % 좋아요
(19) not in/like
(19) 페이징 쿼리 정보: 프로그램에서는 효율성 향상을 위해 합리적인 페이징 사용을 권장합니다. limit, offset은 더 크므로 하위 쿼리와 함께 사용해야 합니다.
(20) 은 금지됩니다. 데이터베이스에서 대규모 쿼리 실행
(21) ⽤ 사용 사전 컴파일된 문은 매개변수만 전달하는 것이 SQL 문을 전달하는 것보다 더 효율적입니다. 횟수 감소 SQL삽입 확률
(22) 금지⽤rand()로 주문
(23) 여러 SQL문을 동시에 업데이트하는 것은 금지됩니다. 🎜> 6. 프로세스 사양 (1) 모든 테이블 생성 작업은 관련된 쿼리를 알려야 합니다. 테이블을 미리 sql;
(2)
모든 테이블 생성은 테이블을 구축하고 온라인에 올리기 전에 구축할 인덱스를 결정해야 합니다. (3)
모든 작업 테이블 구조 변경 및 인덱스 추가는 변경된 테이블에 대한 쿼리가 필요합니다. sql을 DBA에게 전달합니다.
및 기타 관련 인력
(4)
새 테이블을 생성하고 필드를 추가하기 전에 R&D가 필요합니다. 최소한
3일 전에 dba에 이메일을 보내야 합니다. 평가, 최적화 및 검토를 진행합니다(5) 데이터 일괄 가져오기 및 내보내기는 사전에 통보해야 합니다
DBA관찰 보조(6) 금지⽌
도서관에서 온라인으로 백그라운드 관리 및 통계 조회 실행(7) 차단
⽌
예 super 권한이 존재합니다
(8) 프로모션이나 새로운 기능은 사전 공지 필수 DBA입력 ⾏여행 흐름 평가
(9) 업무량이 많은 기간에는 일괄 업데이트나 데이터베이스 쿼리를 하지 마세요
브라더스 IT 에듀케이션의 오리지널 리눅스 운영 및 유지보수 엔지니어 영상/자세한 리눅스 튜토리얼을 무료로 받아보실 수 있습니다. 공식 홈페이지로 문의해주세요. 자세한 내용은 고객 서비스: http://www .lampbrother.net/linux/
PHP, Linux, HTML5, UI, Android 및 기타 비디오 튜토리얼(코스웨어 노트 비디오)을 배우십시오! 문의 Q2430675018
가입을 환영합니다linux소통그룹 478068715
|