Neden MYSQL yüksek LİMİTLİ sorgu aşağı kaydır yavaş mı?
Kısacası senaryo: 16 milyondan fazla kayıtları [boyutu 2 GB] ile Bir tablo. Yüksek LİMİTİ SEÇİN, sorgu daha yavaş olan uzaklığı *primary_key* TARAFINDAN SİPARİŞ kullanırken olur
Bu yüzden
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
far . az sürer
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
O sadece emir 30 kayıtlar ve her halukarda aynı. Siparişten yükü İLE değil.
180 saniye civarında sürer son 30 satır getirilirken şimdi. Nasıl bu kadar basit sorgu optimize edebilirim?
CEVAP
Yüksek uzaklıklar sorgu OFFSET LIMIT
ilk kayıt (ve sadece LIMIT
) saymak gerekir, çünkü sorgu yavaşla, bu normal. Bu değer ne kadar yüksekse, ne kadar uzun sorguyu çalıştırır.
Sorgu, ilk, kayıtlar farklı uzunlukta olabilir, ve, ikinci, silinen kayıtlar arasında boşluklar olabilir çünkü OFFSET
doğru gidin. Kontrol edin ve her bir kayıt sayısı var.
id
MyISAM
tablo PRIMARY KEY
olduğunu varsayarsak, bu hile kullanarak hızlı olur:
SELECT t.*
FROM (
SELECT id
FROM mytable
ORDER BY
id
LIMIT 10000, 30
) q
JOIN mytable t
ON t.id = q.id
Bu makaleye bakın:
MySQL - SELECT (sorgu) - son Derece ya...
Nasıl MySQL etkinleştir'MySQL yen...
Neden bir döngü iki döngü daha yavaş g...
Neden benim program tam olarak 8192 el...
Nasıl çıkış için MySQL csv biçiminde s...