h1

Paging Cerdas di MySQL

29 Maret 2010

Salah satu hal yang sepertinya menjadi pakem di dalam mengembangkan sebuah aplikasi berbasis web adalah kecepatan dan kompabilitas aplikasi.Yang patut dperhatikan adalah ketika akan menampilkan kumpulan data pada aplikasi berbasis web. Kita tidak dapat serta merta menampilkan semua ada yang ada, melainkan menampilkannya per-halaman. Istilah kerennya ‘paging’.

Bagaimana melakukan paging yang efesien ?

Beruntungnya di MySQL terdapat fitur limit yang memudahkan developer untuk melakukan paging. Namun demikian kita masih dapat melakukan berbagai improvisasi untuk meningkatkan performance paging aplikasi yang kita buat. Penulis di sini menshare bagaimana membuat store procedure untuk paging yang berjalan di atas MySQL Database Engine.

DELIMITER $$

DROP PROCEDURE IF EXISTS `secure`.`sp_pagingBiro` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_pagingBiro`(
IN i_limit INT,
IN i_offset INT,
IN i_where_cond varchar(50),
IN i_orderby varchar (50),
OUT o_count INT
)
BEGIN
DECLARE whereCond varchar(50);
DECLARE sortBy varchar(50);
DECLARE sqlString varchar (500);

SET whereCond = 'WHERE 1 = 1';
SET sortBy = '';

IF length(trim(i_where_cond)) > 0 then
IF LOCATE('%',i_where_cond) > 0 then
SET whereCond = replace(i_where_cond, '=',' like ');
SET whereCond = whereCond + ' and ' + whereCond;
END IF;
END IF;

IF length(trim(i_orderby)) > 0 then
SET sortBy = CONCAT('order by ', i_orderby);
END IF;

SET @sql = 'SELECT * from tblbiro ';

SET sqlString = CONCAT('(',@sql, i_where_cond,sortBy, ' LIMIT ',i_limit ,' OFFSET ',i_offSET, ') as resource');
SET @query = CONCAT(@sql, i_where_cond,sortBy, ' LIMIT ',i_limit ,' OFFSET ',i_offSET);
PREPARE ps FROM @query;
EXECUTE ps;
DROP PREPARE ps;

SET @rowCount = CONCAT('SELECT count(*) as jumlah FROM' , sqlString );
PREPARE stmt FROM @rowCount;
EXECUTE stmt;
DROP PREPARE stmt;

END $$

DELIMITER ;

Store procedure ini dapat mengatur jumlah baris untuk tiap page, kondisi where,  ekspresi sorting dan jumlah halaman total

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: