2011-11-28 2 views
1

를 사용하는 경우 BY 기본 ORDER 무엇 :나는이 같은 테이블이 있으면 내가 mysqli에서 SELECT 문 : 쿼리

int  VARCHAR  int 
----------------------------------  
1   "U"   1 
2   "A"   1 
3   "B"   1 

와 나는 같은 PHP의 mysqli를 통해 쿼리를 실행

$sql = "SELECT * FROM " . parent::GetTableName(); 
if ($current_user_only == TRUE) 
    $sql = $sql . " WHERE userID_FK=" . parent::GetUserID(); 

$result = $this->get_db_con()->query($sql); 
if ($result == FALSE) 
    throw new Exception("SQL exec failed (". __FILE__ . __LINE__ . "):  $this->get_db_con()->error"); 

while ($row = mysqli_fetch_array($result)) 
{ 
    echo($row[1]); 
} 

나는 출력과 같이 얻을 : 결과

2   "A"   1 
3   "B"   1 
1   "U"   1 

varchar 열 정렬 할 것으로 보인다. SEQUEL PRO에서 동일한 쿼리를 실행하면 테이블에 입력 된 순서대로 예상 한 순서대로 결과를 얻을 수 있습니다.

아이디어가 있으십니까?

+0

명시 적으로 * 순서를 * db로 설정하지 말아야합니다. –

+0

ALTER TABLE'테이블'ORDER BY'id' – misima

+0

만약 내가 여전히 주문에 신경 쓰지 않는다면 "ORDER BY"를해야합니까? 성능에 영향을 미칠까요? –

답변

3

짧은 대답 : 없음

긴 대답 : MyISAM 테이블의 경우 자연스러운 순서, 즉 디스크에 행이 저장되는 순서 (일반적으로 삽입 순서)입니다. ALTER TABLE ORDER BY InnoDB 테이블의 경우 기본 키 순서입니다.

+1

InnoDB 테이블을 사용하고 있습니다. 내 결과가 PK에 의해 정렬되지 않습니다. –

+0

내 편에서는 약간의 단순화가 있습니다. InnoDB의 PK는 모든 데이터가 저장되는 클러스터 된 인덱스의 기반입니다. 이것은 나무와 같은 데이터 구조입니다. 행은이 구조가 순회되는 순서로 리턴됩니다. – Mchl

4

나는 order by 절없이 특정 순서를 가정하지 않을 것입니다. 행을 ID별로 정렬하려면 order by ID을 사용하십시오.

+0

성능에 영향을 줍니까? 나는 "주문"을하고 싶지 않습니다. –

+0

정렬해야하는 경우 물론 성능에 영향을 미칩니다. 그러나 특히 PHP에서 자신을 정렬하는 것보다 빠를 것입니다. 주문에 관심이 없다면 주문을하지 마십시오. 그렇게한다면,에 의해 주문을 사용하십시오. 데이터베이스는 매우 빠릅니다. 할 필요가없는 경우 최적화하지 마십시오. –