데이터 베 이 스 를 빠르게 만 드 는 10 가지 제안
9542 단어 mysql
첫 번 째 기 교 는 당연 해 보일 지 모 르 지만, 사실상 대부분의 데이터베이스 문 제 는 디자인 이 좋 지 않 은 데이터베이스 구조 에서 비롯 된다.
예 를 들 어 나 는 클 라 이언 트 정보 와 지불 정 보 를 같은 데이터베이스 열 에 저장 하 는 예 를 본 적 이 있다.시스템 과 데이터 베 이 스 를 사용 하 는 개발 자 들 에 게 는 큰일 입 니 다.
새 데이터 베 이 스 를 만 들 때 는 정 보 를 서로 다른 표 에 저장 하고 표준 명명 방식 을 사용 하 며 메 인 키 를 사용 해 야 한다.
원본: http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/
2. 당신 이 최적화 해 야 할 부분 을 잘 알 고 있 습 니 다.
만약 당신 이 어떤 조회 문 구 를 최적화 시 키 고 싶다 면, 이 문장의 결 과 를 똑똑히 아 는 것 이 매우 도움 이 될 것 입 니 다.EXPLAIN 문 구 를 사용 하면 유용 한 정 보 를 많이 얻 을 수 있 습 니 다. 다음 예 를 들 어 보 겠 습 니 다.
EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;
원본: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html
3. 가장 빠 른 검색 어 는... 당신 이 보 내지 않 은 문구 입 니 다.
데이터베이스 에 문 구 를 보 낼 때마다 서버 자원 을 많이 사용 합 니 다.그래서 데이터 가 많은 사이트 에서 가장 좋 은 방법 은 검색 어 를 캐 시 하 는 것 입 니 다.
여러 가지 캐 시 문 구 를 사용 하 는 방법 이 있 습 니 다. 아래 에 몇 가지 가 있 습 니 다.
AdoDB: AdoDB 는 PHP 의 데이터베이스 간소화 라 이브 러 리 입 니 다.이 를 사용 하면 서로 다른 데이터베이스 시스템 (MySQL, PostGreSQL, Interbase 등) 을 선택 할 수 있 고 속 도 를 위해 디자인 된 것 입 니 다.AdoDB 는 간단 하지만 강력 한 캐 시 시스템 을 제공 합 니 다.그리고 AdoDB 는 BSD 허 가 를 가지 고 있 으 며 프로젝트 에서 무료 로 사용 할 수 있 습 니 다.상업 화 된 프로젝트 에 대해 서도 LGPL 허가 가 있다.
Memcached: Memcached 는 분포 식 메모리 캐 시 시스템 으로 데이터 베 이 스 를 기반 으로 하 는 사 이 트 를 가속 화 할 수 있 습 니 다.
CSQL Cache: CSQL 캐 시 는 원본 데이터 캐 시 구조 입 니 다.나 는 그것 을 시험 해 본 적 이 없 지만, 그것 은 매우 좋아 보인다.
4 、 필요 없 는
원 하 는 데 이 터 를 가 져 오 는 흔 한 방법 은 * 문 자 를 사용 하 는 것 입 니 다. 모든 열 을 보 여 줍 니 다.
SELECT * FROM wp_posts;
그러나 당신 이 필요 로 하 는 열 만 열거 해 야 합 니 다. 아래 와 같 습 니 다.만약 매우 작은 사이트, 예 를 들 어 1 분 에 한 사용자 가 방문 하면 별 차이 가 없 을 것 이다.그러나 Cats Who Code 와 같은 대 유량 사이트 가 있다 면 데이터 베 이 스 를 위해 많은 것 을 절약 할 수 있다.
SELECT title, excerpt, author FROM wp_posts;
5. LIMIT 사용
특정 줄 의 데이터 만 얻 는 것 은 흔 하 다.예 를 들 어 블 로 그 는 페이지 당 10 편의 글 만 표시 한다.이 때 는 선택 하고 싶 은 데이터 의 줄 수 를 제한 하기 위해 LIMIT 를 사용 해 야 합 니 다.
LIMIT 가 없 으 면 표 에 100, 000 줄 의 데이터 가 있 습 니 다. 모든 줄 수 를 옮 겨 다 니 는 것 은 서버 에 불필요 한 부담 입 니 다.
SELECT title, excerpt, author FROM wp_posts LIMIT 10;
6. 순환 중인 조회 피하 기
PHP 에서 SQL 을 사용 할 때 SQL 을 순환 문 에 넣 을 수 있 습 니 다.하지만 이렇게 하 는 것 은 당신 의 데이터베이스 에 부담 을 주 었 습 니 다.
다음 의 예 는 '순환 문 에 검색 어 를 끼 워 넣 기' 의 문 제 를 설명 한다.
foreach ($display_order as $id => $ordinal){
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql);
}
너 는 이렇게 할 수 있다.
UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END WHERE id IN (1,2,3)
원본: http://www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different-values-and-a-single-sql-query/
7. join 을 사용 하여 하위 검색 을 교체 합 니 다.
프로그래머 들 은 하위 검색 을 좋아 할 수도 있 고 남용 할 수도 있다.아래 의 하위 조 회 는 매우 유용 하 다.
SELECT a.id,
(SELECT MAX(created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a
하위 조회 가 유용 하지만 join 문 구 는 바 꿀 수 있 고 join 문 구 는 더 빨리 실 행 됩 니 다.
SELECT a.id, MAX(p.created) AS latest_post
FROM authors a
INNER JOIN posts p
ON (a.id = p.author_id)
GROUP BY a.id
원본: http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/
8 、 마스크 사용 조심
어댑터 가 아주 좋 습 니 다. 데 이 터 를 검색 할 때 하나 이상 의 문 자 를 어댑터 로 대체 할 수 있 습 니 다.사용 할 수 없다 는 것 이 아니 라 조심해 서 사용 해 야 하 며, 전체 단어 마스크 (full wildcard) 를 사용 하지 마 세 요. 접두사 마스크 나 백 엔 드 마스크 는 같은 작업 을 수행 할 수 있 습 니 다.
사실 백만 개의 헤비급 데이터 에서 전체 단어 마스크 를 사용 하여 검색 하면 데이터 베 이 스 를 즉시 사용 할 수 있 습 니 다.
#Full wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE '%hello%';
#Postfix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE 'hello%';
#Prefix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE '%hello';
원본: http://hungred.com/useful-information/ways-optimize-sql-queries/
9 、 UNION 으로 OR 대체
다음 예 는 OR 문 구 를 사용 합 니 다.
SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;
UNION 문 구 는 2 개 이상 의 selection 문장의 결 과 를 한데 묶 을 수 있다.아래 의 예 에서 돌아 온 결 과 는 위의 것 과 같 지만 속 도 는 좀 빨 라 야 한다.
SELECT * FROM a, b WHERE a.p = b.q
UNION
SELECT * FROM a, b WHERE a.x = b.y
원본: http://www.bcarter.com/optimsql.htm
10. 색인 사용
데이터베이스 색인 은 도서관 에서 본 색인 과 유사 합 니 다. 원 하 는 정 보 를 더욱 빠르게 얻 을 수 있 습 니 다. 마치 도서관 의 색인 이 독자 로 하여 금 원 하 는 책 을 더욱 빨리 찾 게 하 는 것 과 같 습 니 다.
한 열 에 색인 을 만 들 수도 있 고 여러 열 에 만 들 수도 있 습 니 다.색인 은 표 의 한 열 또는 여러 열의 값 을 특정한 순서 로 구성 하 는 데이터 구조 이다.
다음 문 구 는 Product 표 의 Model 열 에 색인 을 만 듭 니 다.이 색인 이름 은 idx Model 입 니 다.
CREATE INDEX idxModel ON Product (Model);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.