2011-03-22 3 views
1

이 테이블 (table1)을 가지고 있습니다 :삽입하지 않고 데이터베이스에서 마지막 ID를 얻는 효율적인 방법?

id = 1 , color = red 
id = 2 , color = blue 

마지막으로 삽입 한 색상 값을 어떻게 찾을 수 있습니까? 그것은 간단합니다 :

SELECT * FROM table1 ORDER BY id DESC limit 1 

그리고 나서 색상을 얻으시겠습니까? 더 효율적인 방법이 있습니까? select * 대신에 마지막 행으로 가서 색을 찾으라고 말하십니까?

아무 것도 삽입하지 않기 때문에 마지막 삽입을 사용할 수 없습니다.

$id = $db->lastInsertId(); 

답변

1

은 실제로 당신이 쓴 쿼리가 올바른지 단지 것을 선택합니다. SQL 엔진은 마지막 레코드로 이동하여 가져옵니다. 전체 테이블을 스윕하지 않으므로 성능에 대해 걱정할 필요가 없습니다.

0

id하면 autoincremented되고,이 쿼리 :

SELECT * 
FROM table1 
WHERE id = LAST_INSERT_ID() 

당신에게 (당신이 삽입되지 않는 사이에 다른 autoincrementing 테이블에) 마지막으로 현재 세션에 삽입 된 색상

당신이 만약을 반환합니다 현재 세션뿐만 아니라 전반적인 마지막 값이 필요하다면 쿼리가 정상입니다.

SELECT color 
FROM table1 
ORDER BY 
     id DESC 
LIMIT 1 
1
SELECT id, color FROM table1 ORDER BY id DESC limit 1 

마지막 ID를 줄 것이다 그것은 색상 만 인덱싱되지 않습니다 ID 이후

1

합니다 ('*'는 모든 열, 모든 행을 의미)하지만, 기본 키, 이것이입니다 효율적인 운영. 인덱싱되지 않은 열에서 사용하는 경우 성능 문제가 발생할 수 있습니다. LAST_INSERT_ID()도 옵션이지만 현재 세션 중에 행이 삽입 된 경우에만 작동합니다.

2

만 컬러 열의 값을 필요로하는 경우, 다음

SELECT color FROM table1 ORDER BY id DESC limit 1 
관련 문제