아니요, 모든 열을 인덱싱하지 않아야합니다. 데이터를 쓸 때 속도가 느려집니다. CPU가 때때로 200 %에 도달하는 것은 정상적인 현상이 아닙니다. 난 당신이 SQL을 확인하는 것이 좋습니다.
SELECT 문을 최적화하는 것이 좋습니다.
http://dev.mysql.com/doc/refman/5.6/en/statement-optimization.html
1.Optimize 캐시 쿼리. 함수 대신 매개 변수를 사용하십시오.
는
(@의 tadman의 제안을 주셔서 감사합니다) 당신이 현명하게 SELECT
// no cache
$sql = "SELECT username FROM user WHERE signup_date >= CURDATE()";
// cache
$today = date("Y-m-d");
$sql = "SELECT username FROM user WHERE signup_date >= '$today'");
2.EXPLAIN. 잠재적 인 성능 문제를 찾는 데 도움이됩니다.
EXPLAIN select name,phone from user where name="JakLiao";
3. 첫 번째 행 결과 만 필요하면 "LIMIT N"을 사용하십시오.
SELECT * FROM user WHERE country = 'China' limit 1;
4. where 절에서 색인을 사용해야합니다.
//row "name" should add index.
select * from user where name LIKE 'Jak%' limit 10;
5. 테이블을 조인 할 때 인덱스를 사용하십시오.
select company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = 123;
6. 마십시오 "* 선택"
//not suggest
SELECT * FROM user WHERE user_id = 1;
//suggest
SELECT username FROM user WHERE user_id = 1;
7. 절차 (ANALYZE), MYSQL 분석 데이터베이스와 데이터를 당신을 도울 것입니다. 8. 테이블의 행을 알고 싶을 때 COUNT (1).
//not suggest
SELECT count(*) FROM user;
//suggest
SELECT count(1) FROM user;
큰 데이터베이스라고 할 수는 없지만 실제로는 작다고합니다. – RiggsFolly
불필요한 색인은 자원 낭비입니다. 그러나 어떤 인덱스가 가장 적절한지를 결정하는 것은 실제로 실행중인 실제 쿼리와 이러한 쿼리에 대한 성능 기대치에 달려 있습니다. 성능 조정은 "색인"보다 훨씬 많습니다. 해당 테이블의 모든 인덱스가 적절할 수 있습니다. 제공된 정보에서 우리는 "*이 특별한 인덱스 세트가 가장 적절하다고 밝혀진 신중한 분석 *"과 "* 나는 단지 모든 컬럼에 인덱스를 생성합니다. 올바른 색인을 가지지 않아서 불에 태워진다. "" – spencer7593
누군가 (나)가 아닌 50 달러를주고 당신을 위해 그것을 소트하십시오. – Drew