Sorunun, örneğin stackoverflow'un nasıl çalıştığını bilmesiyle çözülebileceğini düşünüyorum. ÖrneğinKategori çok sayfa var (büyük ofsetler) (stackoverflow nasıl çalışır?)
, bu sayfa, bir kaç ms yükler (< 300 ms): https://stackoverflow.com/questions?page=61440&sort=newest
ı o sayfanın Düşündüğüm tek sorgu Böyle bir sorgu alabilir SELECT * FROM stuff ORDER BY date DESC LIMIT {pageNumber}*{stuffPerPage}, {pageNumber}*{stuffPerPage}+{stuffPerPage}
gibi bir şey Çalıştırmak için birkaç saniye, ancak yığın taşma sayfası hemen hemen hiç yüklenmez. Önbelleğe alınmış bir sorgu olamaz, çünkü bu soru zaman içinde yayınlanır ve bir soru yayınlandığında önbelleği yeniden oluşturmak yalnızca deliliktir.
Peki, bu sizin düşüncenizde nasıl çalışır?
Örnek (tablo tam bir SSD sürücüsüne ram önbelleğe ve saklanır)
mysql> select * from thread limit 1000000, 1;
1 row in set (1.61 sec)
mysql> select * from thread limit 10000000, 1;
1 row in set (16.75 sec)
mysql> describe select * from thread limit 1000000, 1;
+----+-------------+--------+------+---------------+------+---------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+----------+-------+
| 1 | SIMPLE | thread | ALL | NULL | NULL | NULL | NULL | 64801163 | |
+----+-------------+--------+------+---------------+------+---------+------+----------+-------+
mysql> select * from thread ORDER BY thread_date DESC limit 1000000, 1;
1 row in set (1 min 37.56 sec)
mysql> SHOW INDEXES FROM thread;
+--------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| thread | 0 | PRIMARY | 1 | newsgroup_id | A | 102924 | NULL | NULL | | BTREE | | |
| thread | 0 | PRIMARY | 2 | thread_id | A | 47036298 | NULL | NULL | | BTREE | | |
| thread | 0 | PRIMARY | 3 | postcount | A | 47036298 | NULL | NULL | | BTREE | | |
| thread | 0 | PRIMARY | 4 | thread_date | A | 47036298 | NULL | NULL | | BTREE | | |
| thread | 1 | date | 1 | thread_date | A | 47036298 | NULL | NULL | | BTREE | | |
+--------+------------+----------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
5 rows in set (0.00 sec)
Tarihte bir endeks var mı? Bu sorgu uzun sürecek kadar uzun sürmemeli ... –
Doğru ama sanırım en az 1 milyon soru olmalı :) – cedivad
Sadece doğru sayfada olduğumdan emin olmak için, iş parçacığı sınırını seçin 1000000, 1; ' –