mysql에서 가끔 보면 PK가 아닌 부분에서 indexing을 걸지않고 내부에서 indexing 역할하는 변수를 만드는데 이빨빠지는 경우가 많다 (잦은 경우에 많이 일어난다. 예를 들어서 특정 사용자별로 ordering을 줘야할 때 따로 order같은데서 남길 필요가 없는 데이터라서 날릴 때 이빨이 빠지게 된다)


이게 한 두개면 그냥 console에서 업데이트를 박아버리던가 할텐데 이게 양이 늘어나면 무지막지하게 귀찮으며 비효율적이다. 프로그래머가 병목자원이라 불리는 이 시대에 이딴 짓을 할 시간이 어디있겠는가.


이럴 때 방금 전에 올린 글  http://oddly.tistory.com/68 을 보면 변수를 선언해서 사용하는데 이걸 좀 응용해봤다


Table student 가 column 이 name, score, rank 가 있을 때


Hwangho / 70 / 1

Minho / 50 / 2

Changho / 40 / 3

Yeonho / 30 / 4

Hyunho / 10 / 5


같은 식으로 있는데 Minho가 빠져버리면 1,3,4,5로 이빨이 빠져버리는데.. 이럴 때 DB에서 싸그리 처리를 하려면..


SELECT @rank:=0;

UPDATE student SET rank=@rank:=@rank+1 ORDER BY rank


이런식으로 하면 1,2,3,4로 다시 이쁘게 들어간다


생각보다 이런 걸 쓸일이 많으므로 숙지해두는게 좋을 것 같다.

Posted by TY
,