cari
Rumahpangkalan dataSQL【SQL学习】有序索引与order by的联系

一般情况下,order by 有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。用有序索引这种,当然是最快的,不过有一些限制条件,来看下面的测试。 

测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。

第一种情况 :

order by的字段不在where条件也不在select中

select sid from zhuyuehua.student where sid < 50000 order by id;

ec28f9fc-2678-3b99-8386-9ec7154165d6.jpg

第二种情况 :

order by的字段不在where条件但在select中。

select id,sid from zhuyuehua.student where sid < 50000 order by id;

f43894ee-b4a1-358b-9709-95642e4e6dc1.jpg

第三种情况 :

order by的字段在where条件但不在select中。

select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id;

19c51ab8-9a98-369c-b60e-da684bc22850.jpg

第四种情况 :

order by的字段在where条件但不在select中。倒序排列

select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc;

1d3b0d87-7dc2-3152-b657-07212fb1dab0.jpg

测试结果:

order by的字段不在where条件不在select中     有排序操作

order by的字段不在where条件但在select中     有排序操作

order by的字段在where条件但不在select中     无排序操作

order by的字段在where条件但不在select中(倒序)     无排序操作

结论:

当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。

分析:

为什么只有order by 字段出现在where条件中时,才会利用该字段的索引而避免排序。这要说到数据库如何取到我们需要的数据了。

一条SQL实际上可以分为三步。

1.得到数据

2.处理数据

3.返回处理后的数据

比如上面的这条语句select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc

第一步:根据where条件和统计信息生成执行计划,得到数据。

第二步:将得到的数据排序。

当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则排序操作。

第三步:返回排序后的数据。

另外:

上面的5万的数据sort只用了25ms,也许大家觉得sort不怎么占用资源。可是,由于上面的表的数据是有序的,所以排序花费的时间较少。如果 是个比较无序的表,sort时间就会增加很多了。另外排序操作一般都是在内存里进行的,对于数据库来说是一种CPU的消耗,由于现在CPU的性能增强,对 于普通的几十条或上百条记录排序对系统的影响也不会很大。但是当你的记录集增加到上百万条以上时,你需要注意是否一定要这么做了,大记录集排序不仅增加了 CPU开销,而且可能会由于内存不足发生硬盘排序的现象,当发生硬盘排序时性能会急剧下降。

注:ORACLE或者DB2都有一个空间来供SORT操作使用(上面所说的内存排序),如ORACLE中是用户全局区(UGA),里面有SORT_AREA_SIZE等参数的设置。如果当排序的数据量大时,就会出现排序溢出(硬盘排序),这时的性能就会降低很多了。

总结:

当order by 中的字段出现在where条件中时,才会利用索引而不排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作。

这个结论不仅对order by有效,对其他需要排序的操作也有效。比如group by 、union 、distinct等。

想知道更多有关sql的教程,请关注PHP中文网sql视频教程


  • ec28f9fc-2678-3b99-8386-9ec7154165d6-thumb.jpg
  • 大小: 16 KB
  • f43894ee-b4a1-358b-9709-95642e4e6dc1-thumb.jpg
  • 大小: 16 KB
  • 19c51ab8-9a98-369c-b60e-da684bc22850-thumb.jpg
  • 大小: 20.6 KB
  • 1d3b0d87-7dc2-3152-b657-07212fb1dab0-thumb.jpg
  • 大小: 21 KB

    Atas ialah kandungan terperinci 【SQL学习】有序索引与order by的联系. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan
    Artikel ini dikembalikan pada:CSDN. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
    SQL: Membuat pengurusan data boleh diakses oleh semuaSQL: Membuat pengurusan data boleh diakses oleh semuaApr 12, 2025 am 12:14 AM

    SqlmakesdatamanagementaccessibleLyprovidingasimpleyetPowultoLsetForqueryingandManagingDataBases.1) itworksWithRelationalDataBases, membolehkanSengserSteShipifyWheyTheyWantTodoThedata.2)

    Strategi Pengindeksan SQL: Meningkatkan prestasi pertanyaan dengan pesanan magnitudStrategi Pengindeksan SQL: Meningkatkan prestasi pertanyaan dengan pesanan magnitudApr 11, 2025 am 12:04 AM

    Indeks SQL dapat meningkatkan prestasi pertanyaan melalui reka bentuk pintar. 1. Pilih jenis indeks yang sesuai, seperti B-Tree, Hash atau Indeks Teks Penuh. 2. Gunakan indeks komposit untuk mengoptimumkan pertanyaan berbilang bidang. 3. Elakkan daripada indeks untuk mengurangkan overhead penyelenggaraan data. 4. Mengekalkan indeks secara teratur, termasuk membina semula dan mengeluarkan indeks yang tidak perlu.

    Cara memadam kekangan dalam SQLCara memadam kekangan dalam SQLApr 10, 2025 pm 12:21 PM

    Untuk memadam kekangan dalam SQL, lakukan langkah -langkah berikut: Kenal pasti nama kekangan yang akan dipadam; Gunakan Penyata Jadual ALTER: Alter jadual Jadual Nama Kekangan Kekangan Nama Kekangan; Sahkan penghapusan.

    Cara menetapkan pencetus sqlCara menetapkan pencetus sqlApr 10, 2025 pm 12:18 PM

    Pencetus SQL adalah objek pangkalan data yang secara automatik melakukan tindakan tertentu apabila peristiwa tertentu dilaksanakan pada jadual yang ditentukan. Untuk menyediakan pencetus SQL, anda boleh menggunakan pernyataan pencetus CREATE, yang termasuk nama pencetus, nama jadual, jenis acara, dan kod pencetus. Kod pencetus ditakrifkan menggunakan kata kunci AS dan mengandungi pernyataan SQL atau PL/SQL atau blok. Dengan menentukan keadaan pencetus, anda boleh menggunakan klausa WHERE untuk mengehadkan skop pelaksanaan pencetus. Operasi pencetus boleh dilakukan dalam kod pencetus menggunakan penyata masuk, kemas kini, atau padam. Kata kunci baru dan lama boleh digunakan untuk merujuk kata kunci yang terjejas dalam kod pencetus.

    Cara Menambah Indeks untuk Pertanyaan SQLCara Menambah Indeks untuk Pertanyaan SQLApr 10, 2025 pm 12:15 PM

    Pengindeksan adalah struktur data yang mempercepat carian data dengan menyusun lajur data. Langkah -langkah untuk menambah indeks ke pertanyaan SQL adalah seperti berikut: Tentukan lajur yang perlu diindeks. Pilih jenis indeks yang sesuai (B-Tree, Hash, atau Bitmap). Gunakan arahan Buat Indeks untuk membuat indeks. Membina semula atau menyusun semula indeks secara teratur untuk mengekalkan kecekapannya. Manfaat penambahan indeks termasuk prestasi pertanyaan yang lebih baik, mengurangkan operasi I/O, penyortiran dan penapisan yang dioptimumkan, dan peningkatan kesesuaian. Apabila pertanyaan sering menggunakan lajur tertentu, pulangkan sejumlah besar data yang perlu disusun atau dikelompokkan, melibatkan pelbagai jadual atau jadual pangkalan data yang besar, anda harus mempertimbangkan untuk menambah indeks.

    Cara Menggunakan Ifelse Untuk Penyataan SQLCara Menggunakan Ifelse Untuk Penyataan SQLApr 10, 2025 pm 12:12 PM

    Kenyataan IFELSE adalah pernyataan bersyarat yang mengembalikan nilai yang berbeza berdasarkan hasil penilaian bersyarat. Struktur sintaksinya ialah: jika (keadaan) kemudian return_value_if_condition_is_true else return_value_if_condition_is_false end if;.

    Cara Melihat Ralat Pangkalan Data SQLCara Melihat Ralat Pangkalan Data SQLApr 10, 2025 pm 12:09 PM

    Kaedah untuk melihat ralat pangkalan data SQL adalah: 1. Lihat mesej ralat secara langsung; 2. Gunakan kesilapan menunjukkan dan menunjukkan perintah amaran; 3. Akses log ralat; 4. Gunakan kod ralat untuk mencari punca kesilapan; 5. Semak sambungan pangkalan data dan sintaks pertanyaan; 6. Gunakan alat debugging.

    Cara Menggunakan SQL berbezaCara Menggunakan SQL berbezaApr 10, 2025 pm 12:06 PM

    Pengendali yang berbeza digunakan untuk mengecualikan baris pendua dalam pertanyaan SQL dan mengembalikan nilai unik sahaja. Ia sesuai untuk senario seperti mendapatkan senarai nilai unik, mengira bilangan nilai unik, dan menggunakannya dalam kombinasi dengan kumpulan oleh.

    See all articles

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Cara Membuka Segala -galanya Di Myrise
    4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Muat turun versi mac editor Atom

    Muat turun versi mac editor Atom

    Editor sumber terbuka yang paling popular

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

    Versi Mac WebStorm

    Versi Mac WebStorm

    Alat pembangunan JavaScript yang berguna

    Pelayar Peperiksaan Selamat

    Pelayar Peperiksaan Selamat

    Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.