Penggunaan limit di Mysql: Saat kita menggunakan pernyataan query, kita sering kali perlu mengembalikan beberapa baris data pertama atau tengah. Apa yang harus kita lakukan saat ini? Jangan khawatir, mysql sudah menyediakan fungsi seperti itu kepada kita.
PILIH * DARI tabel LIMIT [offset,] baris |. baris OFFSET offset
Klausa LIMIT dapat digunakan untuk memaksa pernyataan SELECT mengembalikan sejumlah catatan tertentu. LIMIT menerima satu atau dua argumen numerik. Parameternya harus berupa konstanta bilangan bulat. Jika dua parameter diberikan, parameter pertama menentukan offset baris rekaman pertama yang dikembalikan, dan parameter kedua menentukan jumlah maksimum baris rekaman yang dikembalikan. Offset baris rekaman awal adalah 0 (bukan 1): Untuk kompatibilitas dengan PostgreSQL, MySQL juga mendukung sintaksis: LIMIT # OFFSET #.
mysql> SELECT * FROM table LIMIT 5,10; // Ambil baris record 6-15
//Untuk mengambil semua baris rekaman dari offset tertentu hingga akhir kumpulan rekaman, Anda dapat menentukan -1 sebagai parameter kedua:
mysql> SELECT * FROM table LIMIT 95,-1; // Ambil catatan baris 96-terakhir.
//Jika hanya satu parameter yang diberikan, itu berarti mengembalikan jumlah maksimum baris record:
mysql> SELECT * FROM table LIMIT 5; //Ambil 5 baris record pertama
//Dengan kata lain, LIMIT n setara dengan LIMIT 0,n.
Perhatikan perbedaan antara batas 10 dan batas 9,1:
Misalnya:
1.
Pilih * Dari siklopedia Dimana ID>=(
Pilih Maks(ID) Dari (
Pilih ID Dari cyclopedia Pesan Berdasarkan batas ID 90001
)Sebagai tmp
) batasi 100;
2.
Pilih * Dari siklopedia Dimana ID>=(
Pilih Maks(ID) Dari (
Pilih ID Dari cyclopedia Pesan Berdasarkan batas ID 90000,1
)Sebagai tmp
) batasi 100;
Demikian pula, jika kita mendapatkan 100 rekaman berikutnya setelah 90.000, manakah yang lebih cepat, kalimat pertama atau kalimat kedua?
Kalimat pertama adalah mengambil 90.001 catatan pertama, mengambil nilai ID terbesar sebagai pengidentifikasi awal, dan kemudian menggunakannya untuk dengan cepat menemukan 100 catatan berikutnya. Kalimat kedua adalah mengambil hanya 90.000 catatan terakhir, dan kemudian mengambil Nilai ID. Gunakan tanda awal untuk menemukan kalimat pertama dari 100 rekaman dan jalankan hasilnya 100 baris dalam set (0,23) detik
Hasil eksekusi kalimat 2.100 baris dalam set (0.19) detik
Sebenarnya kalimat kedua dapat disederhanakan menjadi:
Pilih * Dari siklopedia Dimana ID>=(
Pilih ID Dari batas siklopedia 90000,1
)batas 100;
Langsung menggunakan ID dari catatan ke-90.000 tanpa melalui operasi Max. Ini seharusnya lebih efisien secara teori, namun dalam penggunaan sebenarnya efeknya hampir tidak terlihat, karena ID pemosisian hanya mengembalikan 1 catatan, dan Max hampir tidak perlu melakukannya. dijalankan. Anda bisa mendapatkan hasilnya, tetapi menulisnya dengan cara ini lebih jelas dan jelas, menghilangkan kebutuhan untuk menggambar ular.
Pilih 100 Teratas * Dari siklopedia Dimana ID>=(
Pilih 90001 Maks (ID) Teratas Dari (
Pilih ID Dari siklopedia Pesan Berdasarkan ID
)Sebagai tmp
)
Tapi tidak peduli apakah itu diterapkan dalam prosedur tersimpan atau langsung dalam kode, hambatannya adalah TOP MS-SQL selalu mengembalikan N catatan pertama. Situasi ini tidak terlalu terasa ketika jumlah data tidak besar, tetapi jika ada ratusan atau ribuan 10.000, efisiensinya pasti rendah. Sebagai perbandingan, limit MySQL memiliki banyak keunggulan.
,melaksanakan:
Pilih ID Dari batas siklopedia 90000
Pilih ID Dari batas siklopedia 90000,1
Hasilnya adalah:
90000 baris dalam set (0,36) detik
1 baris dalam set (0,06) detik
MS-SQL hanya dapat menggunakan Select Top 90000 ID From cyclopedia. Waktu eksekusi adalah 390ms, dan waktu eksekusi operasi yang sama tidak sebaik MySQL 360ms.
Offset batas digunakan ketika jumlah record lebih banyak. Jika jumlah record lebih sedikit, offsetnya lebih kecil, jadi lebih baik menggunakan limit secara langsung. Semakin besar offsetnya, semakin baik.
//////////////////////////////////////////////////// /// /////////////////////////
1. Bila offsetnya relatif kecil.
pilih * dari batas yanxue8_visit 10,10
Jalankan beberapa kali, waktu tetap antara 0,0004-0,0005
Pilih * Dari yanxue8_visit Dimana vid >=(
Pilih vid Dari yanxue8_visit Pesan Berdasarkan batas vid 10,1
) batas 10
Jalankan beberapa kali, waktu tetap antara 0,0005-0,0006, terutama 0,0006
Kesimpulan: Jika offset offset kecil, lebih baik menggunakan limit secara langsung. Tampilan ini disebabkan oleh subquery.
2. Ketika offsetnya besar.
pilih * dari yanxue8_visit batas 10000,10
Jalankan berkali-kali, waktunya tetap sekitar 0,0187
Pilih * Dari yanxue8_visit Dimana vid >=(
Pilih vid Dari yanxue8_visit Pesan Berdasarkan batas vid 10000,1
) batas 10
Setelah beberapa kali dijalankan, waktu tetap berada di sekitar 0,0061, yaitu hanya 1/3 dari waktu sebelumnya. Semakin besar offset presetnya, semakin baik pula hasil akhirnya.
//////////////////////////////////////////////////// /// ///////////////////////////////////////////////// /
mysql> SELECT * FROM table LIMIT 95,-1; // Ambil catatan baris 96-terakhir.
//Jika hanya satu parameter yang diberikan, itu berarti mengembalikan jumlah baris record maksimum
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/zhqingyun163/archive/2009/12/22/5053579.aspx