Вот пример на php + mysql. Если навесить индексы на поля будет весьма быстро работать
$limit = 10; // количество записей на одну страницу
$page = $_GET['page']; // получаем номер страницы из URL
$offset = ($page - 1) * $limit;
// получаем параметры выбора пользователя
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];
$param3 = $_GET['param3'];
// подготавливаем и выполняем запрос
$stmt = $pdo->prepare('SELECT * FROM my_table WHERE column1 = :param1 AND column2 = :param2 AND column3 = :param3 LIMIT :limit OFFSET :offset');
$stmt->bindValue(':param1', $param1);
$stmt->bindValue(':param2', $param2);
$stmt->bindValue(':param3', $param3);
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);