2009-08-11 6 views
1

나는 mysql 테이블에 데이터를 수집하는 응용 프로그램을 가지고있다. 테이블에는 고유 ID 열이 없으므로 id로 특정 행을 참조 할 수 없습니다.MYSQL 테이블의 행 순서가 고정되어 쿼리가 항상 순서대로 결과를 반환합니까?

나는 테이블에 추가 된 새 행을 매일 다른 곳으로 업로드하기 위해 덤프 응용 프로그램을 작성하려고합니다. 고유 한 id 필드를 추가하고 덤프 된 마지막 ID를 저장하여이 작업을 수행 할 수는 있지만 테이블에 ID 열만 추가하고 싶지는 않습니다.

그래서 나는 모든 덤프마다 테이블의 행 수를 저장하고 테이블을 덤프 할 때 다음 번에 오프셋으로 사용할 것이라고 생각했습니다 (select * from table limit verylargenumber offset x). 물론, 테이블 끝에 새로운 행이 항상 삽입된다는 보장이있는 경우에만 작동하므로 모든 새로운 행이 오프셋 뒤에있게됩니다.

나는 그것에 의지 할 수 있다고 가정합니다. 내가 맞습니까?

+0

답변 해 주셔서 감사합니다. 데이터베이스가 액세스를 최적화하기 위해 인덱스 만 사용하고 실제 물건에는 영향을 미치지 않는다고 생각했습니다. 내가 틀렸어. –

답변

4

아니요. 데이터베이스는 쿼리를보다 빠르게 최적화하고 최적화하기 위해 문제를 해결합니다. 순서에 관계없이 order by 절을 쿼리에 추가해야합니다. 테이블에 고유 ID를 추가하는 것을 고려해야합니다.

+0

데이터베이스 엔진이 "최적화하고 쿼리를 더 빠르게 만들려고 노력하고 싶습니다."- 정말로 그럴 것입니다. 게으른 부랑자는 아무것도하지 않습니다. – ChssPly76

+0

하지만 그건 당신이 의지 할 수있는 것이 아닙니다. 결국 그럴 것입니다. – markus

1

아니요, 그렇지 않습니다. 엔진이 행을 리턴하는 순서는 확실하지 않습니다. 고유 ID가없는 표는 일반적으로 어쨌든 그런 고드 생각이 아닙니다. 이 경우에, 당신은 확실히 하나를 사용할 충분한 이유가 있습니다.

1

파일 시스템과 마찬가지로 테이블이 최적화되거나 조각 모음되지 않으면 삭제 된 데이터가 새 데이터가 삽입되는 "슬롯"을 비 웁니다. 테이블 끝 부분에 항상 추가되는 것은 아닙니다. 당신이에 D를 삽입 할 경우, 당신은 B를 삭제하면 다음 표는 기본적으로 A, [여유 공간] 모양을 A, B, C

C

그래서

:

은 그래서 당신은 3 개 행이 말한다 귀하의 테이블은 이제 다음과 같이 보입니다 : A, D, C

가장 좋은 방법은 고유 한 자동 증가 키를 사용하는 것입니다. 이렇게하면 쿼리 속도가 빨라집니다.

관련 문제