altta sorguyu yazdım ama şöyle bir durum var veri biraz fazla olduğu için sadece kitapların olduğu db 220 mb filan diğerleri de var tabi burada kategorilere ait kitaplar listeleniyor ve sıkıntı şu çok yavaş açıyor bunu nasıl hızlandırabiliriz ajax ile yapıp sayfa değiştikçe mi yapmak lazım ajaxa girmeden halledebilir miyiz?

$perPage    = 20;
$query = $db->prepare("SELECT COUNT(bt.id) total FROM books b join books_types bt on b.id = bt.bid WHERE bt.tid = :tid");
$query->execute([
'tid' => $_GET['id']
]);
$totalRow = $query->fetchColumn();
$totalPage = ceil($totalRow / $perPage);
$page = isset($_GET['sayfa']) ? (int) $_GET['sayfa'] : 1; 
if($page < 1) $page = 1; 
if($page > $totalPage) $page = $totalPage; 
$limit = ($page - 1) * $perPage;

$query = $db->prepare("SELECT b.*, bt.tid, bt.bid FROM books b join books_types bt on b.id = bt.bid WHERE b.status = '1' and bt.tid = :tid limit $limit,$perPage");
$query->execute([
'tid' => $_GET['id']
]);
$eniyiler = $query->fetchAll();

$types = $db->prepare("SELECT * FROM types order BY sortby ASC");
$types->execute();

$types2 = $db->prepare("SELECT * FROM types where id = :id");
$types2->execute([
'id' => $_GET['id']
]);
$typcek=$types2->fetch(PDO::FETCH_ASSOC);

$showPaginateNumbers = 11;

$minMid = ceil($showPaginateNumbers/2);
$maxMid = ($totalPage+1) - $minMid;

$pageMid = $page;
if($pageMid < $minMid) $pageMid = $minMid;
if($pageMid > $maxMid) $pageMid = $maxMid;

$leftPagination = round($pageMid - (($showPaginateNumbers-1) / 2));
$rightPagination = round((($showPaginateNumbers-1) / 2) + $pageMid);

if($leftPagination < 1) $leftPagination = 1;
if($rightPagination > $totalPage) $rightPagination = $totalPage;