1. InnoDB 대신 MyISAM을 사용하세요
완전히 틀렸어요, 반박 이유:
우선 원글에서는 MyISAM이 기본으로 사용된다고 되어 있었는데, 사실 MySQL 5.5.x부터 InnoDB가 기본 테이블이 되었습니다. 엔진.
게다가 단순히 InnoDB를 사용한다고 해서 모든 문제가 해결되는 것은 아닙니다. 심지어 맹목적으로 사용하면 애플리케이션 성능이 10%, 심지어 40%까지 저하될 수도 있습니다.
포럼 섹션 테이블, 뉴스 분류 테이블, 각종 코드 테이블, 기타 오랫동안 운영되지 않는 테이블 등 특정 비즈니스를 구체적으로 처리하는 것이 가장 좋은 방법입니다. 그래도 뛰어난 성능을 갖춘 MyISAM 엔진을 사용해야 합니다. 성능.
사용자, 계정, 파이프라인 등 데이터 무결성과 타이밍이 엄격하게 요구되는 트랜잭션 처리가 필요한 경우에는 InnoDB 엔진을 사용해야 하며 애플리케이션도 트랜잭션 처리 메커니즘을 잘 활용해야 합니다. . 물론 트랜잭션 처리는 필연적으로 많은 성능 손실을 가져오지만 이는 단순한 동시성이 높은 애플리케이션에서는 꼭 필요한 작업입니다.
마지막으로, 외래 키 제약 조건은 성능에 심각한 영향을 미치기 때문에 일반적으로 공용 웹 인터넷 애플리케이션에서는 사용되지 않습니다. 데이터 무결성은 여전히 프로그래머나 애플리케이션 아키텍처 자체의 견고성에 의존하여 유지됩니다. 공식적인 세 번째 패러다임은 기업 내부 MIS 시스템 및 12306과 같은 웹사이트에서만 사용됩니다.
2. PHP의 mysql 방법을 사용하세요
완전히 틀린 것은 아니지만 적절하게 선택해야 합니다.
Mysqli는 좋지만 모든 서버가 PHP용 mysqli 지원을 컴파일한 것은 아닙니다.
애플리케이션이 자신이 배포한 서버만 사용하도록 결정할 수 있고 애플리케이션이 완전히 직접 개발된 경우 mysqli가 최선의 선택입니다.
그러나 애플리케이션이 가상 호스트에 배포되거나 다른 사람(예: 분산 프로젝트)에 의해 배포될 가능성이 높으면 MySQL 기능 세트를 정직하게 사용하거나 잘 캡슐화하거나 성숙한 프레임워크를 사용하여 SQL을 제거하는 것이 좋습니다. 주입.
3. 사용자 입력을 필터링하지 마세요
말할 것도 없이 이것은 MagicQuote이거나 성숙한 프레임워크입니다. SQL 주입은 오래된 주제입니다.
4. UTF-8을 사용하지 마세요
대부분의 경우 그렇습니다. 하지만 신중하게 고려해야 합니다.
UTF-8 문자 하나가 3바이트를 차지하므로 UTF-8이 파일보다 좋습니다. GBK와 같은 다른 인코딩은 33% 더 큽니다. 즉, 동일한 웹페이지가 UTF-8 인코딩에서는 100KB라면 GBK 인코딩에서는 66KB에 불과합니다. 따라서 PHP가 UTF-8을 사용하도록 결정되더라도 프런트 엔드 페이지는 상황에 따라 필요한 인코딩을 선택해야 합니다. 그러나 PHP가 UTF-8을 사용하고 프런트 엔드 템플릿이 GBK이며 템플릿 엔진이 강력하지 않은 경우 트랜스코딩 작업만으로 충분합니다. 따라서 단순히 UTF-8을 선택하는 대신 필요한 인코딩을 사용해 보십시오.
마지막 단어: UTF-8: strlen("I")=3 및 GBK: strlen("I")=2
5. SQL을 사용해야 하는 경우에는 PHP를 사용하세요.
적절하게 동일 고려 :
예를 들어 어떤 사람들은 등록 시간과 게시 시간의 효과를 얻기 위해 테이블을 생성할 때 기본값으로 CURRENT_TIMESTAMP를 채우는 데 익숙합니다. 또는 시간 판단 SQL 문에 SELECT x FROM tab1 WHERE regdate와 같은 내용을 작성합니다. 올바른 방법은 MySQL의 시간 기능을 사용하지 않고 애플리케이션에서 시간을 계산하는 것입니다. 분산 어플리케이션이라면 시간을 균일하게 관리하기 위한 타임 서버가 있어야 합니다.
기사에 언급된 일부 MySQL 수학 함수도 주의해서 사용해야 합니다. 대규모 애플리케이션에서는 데이터베이스에 대한 부담이 가장 큰 경우가 많으며, 복잡한 WHERE 문은 쿼리 속도를 저하시키는 주범이기 때문입니다. 따라서 계산은 코어 데이터베이스보다는 글로벌 안정성에 영향을 주지 않는 저렴한 애플리케이션 서버에 최대한 배치되어야 합니다.
6. 쿼리를 최적화하지 않음
말할 필요도 없이 대규모 애플리케이션에서는 다양한 JOIN 사용도 허용하지 않습니다. 두 개의 쿼리를 작성하더라도 PHP를 사용하여 데이터를 병합할 수 있습니다.
7. 잘못된 데이터 유형 사용
INT, TinyINT, VARCHAR, CHAR, TEXT와 같은 필드 유형을 합리적으로 선택하면 문제가 없습니다.
Date, DateTime, TIMESTAMP 세 가지 유형은 대규모 애플리케이션에서는 사용하면 안 되며 대신 INT(10) UNSIGNED를 사용해야 합니다.
하나는 성능이고, 다른 하나는 애플리케이션, 특히 PHP에서 UNIX_TIMESTAMP 타임스탬프를 변환하는 것이 매우 편리하다는 것입니다. 다양한 시간 형식을 출력하기 위해 Date를 사용하는 것은 번거롭습니다.
8. SELECT 쿼리에 *
사용
9. 인덱싱이 부족하거나 과대인덱싱
인덱스가 필요하지만 인덱스로 쿼리를 해결할 수 없는 경우 memcache 또는 nosql 솔루션을 고려하세요.
10. 백업하지 마세요
작성자가 그냥 숫자를 만들어낸 것인가요?
11. 또한 다른 데이터베이스를 고려하지 마세요
이는 매우 정확합니다. 애플리케이션에서는 해당 애플리케이션에 대해 다른 데이터베이스를 선택해야 할 뿐만 아니라 특정 비즈니스 유형에 대해 동일한 애플리케이션에서 여러 데이터베이스를 병렬로 사용해야 합니다. 데이터베이스가 아닌 경우에도 다양한 캐싱, 메모리 저장 및 기타 솔루션이 있습니다.
위 내용은 게임 개발자를 위한 콘텐츠를 포함하여 게임 개발자와 PHP 개발자가 흔히 저지르는 MySQL 오류 10가지에 대한 수정 분석을 소개한 것입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.