<< MySQL ÀÇ limit ¿Í ºñ½ÁÇÏ°Ô »ç¿ëÇÑ ¿¹ >>

[Âü°í »çÀÌÆ®]
  - ROWNUM¿¡ ´ëÇÏ¿© (kimho's Oracle )




testboard ¿¡¼­ 5¹ø° ºÎÅÍ 10¹ø° ±îÁö °ªÀ» ±¸ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.  

================= oracle_limit.php3 =============================

$offset = 5;		// ½ÃÀÛ À§Ä¡
$listnum = 10;		// ¼±ÅÃÇÒ ¸®½ºÆ®ÀÇ °³¼ö

$fields = "no, name, title, count";
$query = "select $fields from
            (select rownum as rnum, $fields from testboard)
            where rnum > $offset and rownum <= $listnum
        ";
$stmt = $oci->query($query);

================= oracle_limit.php3 =============================





============================ [Âü°í] =============================
SELECT field1, field2 FROM 
(SELECT field1, field2, rownum as row_no FROM 
(SELECT field1, field2 FROM table1
ORDER BY field1, field2)
WHERE rownum <= 50 )
WHERE row_no >= 11 and row_no <= 20
;
ÀÌ·¸°Ô »ç¿ëÇÏ½Ã¸é ´ëÃæµÉ °Í °°³×¿ä.

±×·¯³ª Å« Å×À̺íÀ» ÀÌ·¸°Ô »ç¿ëÇϽøé
±× ½Ã½ºÅÛÀÌ ¾Æ¹«¸® ¼º´ÉÀÌ ¶Ù¾î³­ ½Ã½ºÅÛÀ»
»ç¿ëÇÑ´Ù°í ÇÏ´õ¶óµµ À¯Àú°¡ ¸¹¾ÆÁö°í
µ¥ÀÌŸ°¡ ´Ã¾î°¡¸é ¼º´ÉÀÌ ´«¿¡ ¶Ù°Ô
ÀúÇÏ µÉ °ÍÀÔ´Ï´Ù. full table scan ¿¡ sorting...

ÀÌ·± °æ¿ì´Â field1, field2 ¿¡ À妽º¸¦ ¸¸µé°í
À妽º¸¦ ÀÌ¿ëÇØ¾ß ÇÕ´Ï´Ù.

create index table1_idx on table1
( field1, field2 ) tablespace users
storage ( initial 1M next 1M pctincrease 0 )
;
SELECT /*+ index_desc( table1 table1_idx ) */
field1, field2
FROM table1 
where rownum < 10
;

±×¸®°í ´ç¿¬È÷ ´ÙÀ½¹ø¿¡´Â ¾Æ·¡¿Í ºñ½ÁÇÑ
·ÎÁ÷À» »ç¿ëÇØ¾ß µÇ°ÚÁÒ?
SELECT /*+ index_desc( table1 table1_idx ) */
field1, field2
FROM table1 
where rownum < 10
and field1 <= ???
and field2 < ???
;

Å×½ºÆ® ÇØ º¸¼¼¿ä.

-- bravo3 ´ÔÀÌ ¾²½Å ±Û:
>> 1 ~ 10 ±îÁö´Â Á¦´ë·Î select µË´Ï´Ù.
>> 
>> SELECT * FROM (SELECT * FROM (SELECT field1, field2 FROM table1 ORDER BY
>> field1, field2) WHERE rownum <= 50 ORDER BY rownum) WHERE rownum >= 1 and
>> rownum <= 10
>> 
>> ±×·¯³ª, 11 ~ 20 ±îÁö select Çϸé 'no rows selected' ¶ó°í select °¡
>> ¾ÈµË´Ï´Ù.
>> 
>> SELECT * FROM (SELECT * FROM (SELECT field1, field2 FROM table1 ORDER BY
>> field1, field2) WHERE rownum <= 50 ORDER BY rownum) WHERE rownum >= 11 and
>> rownum <= 20 

============================ /[Âü°í] =============================



============================ [Âü°í] =============================
¿À¶óŬ·Î °Ô½ÃÆÇÀ» ±¸ÇöÇÒ¶§ °¡Àå ¾Ö·ÎÁ¡ÀÌ »ý±â´Â ºÎºÐÀÌ ÆäÀÌ¡Àεí ÇÕ´Ï´Ù.

°£ÆíÇÏ°Ô ÇÏ´Â ¹æ¹ý¿¡´Â index_desc ÈùÆ®¸¦ »ç¿ëÇؼ­ ±¸ÇöÇÏ´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù.

¿¹¸¦ ¿ªÁ¤·ÄÀ妽º(?)¸¦ »ç¿ëÇؼ­ rownumÀ» ÀÌ¿ëÇÑ ÆäÀÌ¡À» ÇÏ´Â ¹æ¹ýÀε¥¿ä ¿¹¹®À» µé¾îº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

Primary key´Â ÀÏ°ý ½Ã¸®¾ó ³Ñ¹ö(ID¶ó°í ÇÏÁÒ)¶ó ÇÏ°í Primary keyÀÇ Constraints NameÀÌ PK_BOARD¶ó°í ÇÑ´Ù¸é

select a.id from (select /*+ index_desc(PK_BOARD) */ rownum as rnum, id from board where id>0 order by id desc) a where rnum >= 1 and rownum <=20°ú °°Àº Çü½ÄÀÇ Äõ¸®¹®À» ¾²¸é ÇÑÆäÀÌÁö¿¡ 20°³ÀÇ ±ÛÀÌ ¶ß°Ô µË´Ï´Ù.

°Ô½ÃÆÇÀÇ ±¸Çö¹æ¹ýÀº MysqlÀ» »ç¿ëÇغ¸¼Ì´Ù¸é ±âº»ÀûÀ¸·Î ÃëÇâ¿¡ ¸Â´Â ¹æÇâÀ¸·Î ±¸ÇöÇÏ½Ã¸é µÇ±¸¿ä Oracle ¿ª½Ã ÆäÀÌ¡ ÀÌ¿ÜÀÇ ºÎºÐ¿¡¼­´Â Mysql°ú ¸¶Âù°¡Áö¶ó°í »ý°¢À» ÇÕ´Ï´Ù.


============================ /[Âü°í] =============================