2010-08-02 4 views
1

PHP를 사용하여 MySQL 데이터베이스와 상호 작용하고 "SELECT * FROM ..."으로 MySQL을 쿼리하는 것이 "SELECT ID FROM ..."보다 다소 효율적인지 궁금합니다.MySQL SELECT 효율

+3

downvotes는 무엇입니까? 속는 사람이라면 그렇게 말한 의견을 남겨 두십시오. – BoltClock

+1

왜 PHP가 문제가됩니까? 효율성 문제는 인터페이스가 쿼리에 사용되었는지에 달려 있습니까? – zerkms

답변

4

덜 효율적입니다.

생각하면 SQL은 선택한 각 행에 대한 모든 데이터를 보냅니다.

MassiveTextBlock이라는 열이 있다고 가정하면이 열은 SELECT * 일 때 포함되므로 실제로 필요하지 않을 때 SQL에서 모든 데이터를 보내야합니다. 반대로 SELECT id은 숫자 모음을 잡는 중입니다.

+0

좋아, 나는 그것을 통해 정보를 보내는 경우 정렬 및 오른쪽 행을 선택하는 것보다 더 큰 성능 빠는 사람인지 몰랐어요. 감사. – jorgen

+1

@Graphain : 이러한 질문을하는 사람들은 성능에 대해 전혀 모르고 있고 SELECT 대신에 (* 대신) id가 적은 테이블 및 LIKE '% bla %'조건에서 성능을 향상시키는 데 도움이되지 않는다는 점도 명심해야합니다 ;-) – zerkms

+0

@zerkms : @ Graphain의 답변과 관련이 있는지 잘 모르겠습니다. –

0

SELECT ID보다 많은 정보를 가져 오기 때문에 효율성이 떨어집니다. 또한 두 번째 질문은 색인을 사용하여 제공 될 가능성이 큽니다.

0

왜 데이터를 선택 하느냐에 달려 있습니다. phpMySQL과 같은 원시 데이터베이스 인터페이스를 작성한다면 의미가 있습니다. 당신이 동일한 조건 및 연결 작업과 같은 테이블에서 여러 쿼리를 수행하는 경우

, 다음 SELECT col1, col2 FROM table이 같이 동일한 데이터의 다른 부분을 얻기 위해 두 개의 독립적 인 SELECT col1 FROM tableSELECT col2 FROM table을 사용하는 것보다 할 수있는 더 의미가 있습니다 동일한 쿼리에서 두 작업을 모두 수행합니다.

그러나 일반적으로 불필요한 데이터가 DBMS에 의해 정리되는 것을 최소화하기 위해 테이블에서 필요한 열만 선택해야합니다. 데이터베이스가 클라이언트 서버와 다른 서버에 있거나 데이터베이스 서버가 오래되거나 느린 경우이 증가의 이점이 크게 나타납니다.

SELECT *을 피할 수없는 조건은 없지만 데이터 모델에 심각한 디자인 결함이있을 수 있습니다.

0

색인에 따라 다릅니다.

MySQL에서 결과를 가져 오는 데 사용한 색인에만있는 열만 선택하면 더 적은 열을 선택하면 때로는 많은 시간을 절약 할 수 있습니다. 예를 들어

, 당신은 열 id에 인덱스를 가지고 있고,이 쿼리 수행하는 경우 :

SELECT id FROM mytable WHERE id>5 

는 다음의 MySQL은 인덱스를 읽을 필요가, 심지어 테이블 행을 읽을 필요하지 않습니다. 다른 한편으로는, 당신은 같은에 추가 열을 선택하는 경우 :

SELECT id, name FROM mytable WHERE id>5 

그런 다음 MySQL은 다음 인덱스에서 ID를 읽을 이름 열을 읽을 수있는 테이블 행으로 이동해야합니다.

그러나 색인에서 선택하지 않은 열을 읽는 경우 더 많은 열을 읽는 것이 큰 차이를 만들지는 못하지만 약간의 차이가 있습니다. 일부 열에 큰 TEXT 또는 BLOB 열과 같이 많은 양의 데이터가 포함되어있는 경우 필요하지 않은 경우 제외하는 것이 좋습니다.