Rumah pangkalan data tutorial mysql MySQL优化器中一个Count和覆盖索引的问题_MySQL

MySQL优化器中一个Count和覆盖索引的问题_MySQL

Jun 01, 2016 pm 01:34 PM
where

bitsCN.com

MySQL优化器中一个Count和覆盖索引的问题

 

MySQL优化器中一个Count和覆盖索引的问题_MySQL

 

现象说明

       其实这里主要要说明的是一个优化器还需要改进的地方。

 

优化器会根据where条件和select_list里面的字段决定在使用一个索引(sta)后,是否需要回表—回到聚集索引取数据。

 

基本的做法是:在确定了一个索引后,将select_list和where中出现的所有字段都拿来判断一下,如果字段都存在于sta索引中,则可以使用覆盖索引。

 

第一个explan可以用上覆盖索引(Using Index), 是因为select_list里面只有count(*),而count(*)在语法解析阶段就被特殊处理,不作为特殊字段。

 

第二个字段在现在的实现中,因为gmt不是sta索引的一部分(sta索引定义上只有sta一个字段,算上聚集索引结构,就是sta,auci)。所以最后判定为不能使用覆盖索引。

 

性能差别

         表中放入500w数据以后,这两个查询的时间相差25倍(0.19s vs  5s)。

 

存在改进

         其实我说这个“不科学”,是因为第二个语句居然不能使用覆盖索引。按照count(gmt)的语义,是计算gmt不为NULL的所有行的数目。但是表定义中,分分明已经说明了gmt为not null。那么就可以转成count(*)了!

     目前因为count、sum、count(distinct)这些操作的处理方法被揉在一起,因此没有特别分开。

 

应用警惕

         好在按照正常的习惯,需要计算总数时,最多是count(auci)或者count(*), 不会故意去count一个别的字段。当时若使用的是MyISAM,就需要小心了。

 

         从上面的分析可以推测得到,如果这是个MyISAM表,还是一样的where条件,count(*)是可以使用覆盖索引的,但是count(auci)就不行了。

 

MySQL优化器中一个Count和覆盖索引的问题_MySQL

bitsCN.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

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 lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Praktikal untuk Kaedah Where dalam Koleksi Laravel Panduan Praktikal untuk Kaedah Where dalam Koleksi Laravel Mar 10, 2024 pm 04:36 PM

Panduan Praktikal Ke Mana Kaedah dalam Koleksi Laravel Semasa pembangunan rangka kerja Laravel, koleksi ialah struktur data yang sangat berguna yang menyediakan kaedah yang kaya untuk memanipulasi data. Antaranya, kaedah Where ialah kaedah penapisan yang biasa digunakan yang boleh menapis elemen dalam koleksi berdasarkan syarat yang ditetapkan. Artikel ini akan memperkenalkan penggunaan kaedah Where dalam koleksi Laravel dan menunjukkan penggunaannya melalui contoh kod tertentu. 1. Penggunaan asas kaedah Where

Cara menggunakan kaedah Where dalam koleksi Laravel Cara menggunakan kaedah Where dalam koleksi Laravel Mar 10, 2024 pm 10:21 PM

Cara menggunakan kaedah Where dalam koleksi Laravel Laravel ialah rangka kerja PHP popular yang menyediakan pelbagai fungsi dan alatan untuk memudahkan pembangun membina aplikasi dengan cepat. Antaranya, Koleksi ialah struktur data yang sangat praktikal dan berkuasa dalam Laravel Pembangun boleh menggunakan koleksi untuk melaksanakan pelbagai operasi pada data, seperti penapisan, pemetaan, pengisihan, dsb. Dalam koleksi, kaedah Where ialah kaedah yang biasa digunakan untuk menapis koleksi berdasarkan syarat yang ditentukan.

Dari pemula hingga mahir: Kuasai kemahiran menggunakan adalah dan di mana pemilih Dari pemula hingga mahir: Kuasai kemahiran menggunakan adalah dan di mana pemilih Sep 08, 2023 am 09:15 AM

Dari pemula hingga mahir: Kuasai kemahiran menggunakan adalah dan di mana pemilih Pengenalan: Dalam proses pemprosesan dan analisis data, pemilih adalah alat yang sangat penting. Melalui pemilih, kami boleh mengekstrak data yang diperlukan daripada set data mengikut keadaan tertentu. Artikel ini akan memperkenalkan kemahiran penggunaan ialah dan tempat pemilih untuk membantu pembaca dengan cepat menguasai fungsi berkuasa kedua-dua pemilih ini. 1. Penggunaan pemilih is Pemilih is ialah pemilih asas yang membolehkan kita memilih set data berdasarkan syarat yang diberikan.

Penggunaan asas mysql left join dan perbezaan antara on dan where Penggunaan asas mysql left join dan perbezaan antara on dan where Jun 02, 2023 pm 11:54 PM

Prakata Apabila kita menulis pernyataan SQL, kita tidak boleh mengelak daripada menggunakan kata kunci sambungan, seperti sambungan dalam dan sambungan luar. Terdapat banyak jenis. Saya akan menyiarkan di sini gambar yang saya temui di tempat lain: Saya rasa gambar ini sangat terperinci Ia menunjukkan jenis pautan yang biasa dalam pernyataan SQL. kata kunci LEFTJOIN akan mengembalikan semua baris dari jadual kiri, walaupun tiada baris yang sepadan dalam jadual kanan. Sebenarnya, leftjoin lebih mudah difahami secara literal, tetapi masih terdapat beberapa masalah semasa penggunaan Contohnya, jika keadaan selepas dan selepas di mana, keputusannya adalah berbeza sama sekali

Analisis penggunaan kaedah Where dalam koleksi Laravel Analisis penggunaan kaedah Where dalam koleksi Laravel Mar 09, 2024 pm 06:51 PM

Laravel ialah rangka kerja pembangunan PHP yang popular yang menyediakan fungsi yang kaya dan mudah Pengumpulan adalah salah satu struktur data yang sangat penting dalam Laravel. Kelas pengumpulan menyediakan banyak kaedah yang berkuasa, salah satunya ialah kaedah where. Artikel ini akan menggunakan contoh kod khusus untuk menganalisis penggunaan kaedah where dalam koleksi Laravel. 1. Buat koleksi Pertama, kita perlu mencipta koleksi yang mengandungi beberapa data. boleh

Penjelasan terperinci mengenai kaedah Di mana pengumpulan Laravel Penjelasan terperinci mengenai kaedah Di mana pengumpulan Laravel Mar 10, 2024 pm 01:33 PM

Laravel ialah rangka kerja PHP yang popular, dan kelas Koleksinya menyediakan fungsi pemprosesan data yang berkuasa. Antaranya, kaedah Where adalah salah satu kaedah yang biasa digunakan dalam kelas pengumpulan, digunakan untuk menapis data yang memenuhi syarat. Artikel ini akan memperkenalkan kaedah Where bagi koleksi Laravel secara terperinci, termasuk kaedah penggunaan, makna parameter dan contoh kod khusus. 1. Gambaran keseluruhan kaedah Where Kaedah Where digunakan untuk menapis elemen dalam koleksi yang memenuhi syarat yang ditetapkan dan mengembalikan a

Cara menggunakan klausa WHERE dalam SQL untuk menentukan kriteria pemilihan Cara menggunakan klausa WHERE dalam SQL untuk menentukan kriteria pemilihan Jun 03, 2023 pm 04:31 PM

Klausa SQLWHERE Klausa WHERE digunakan untuk menentukan kriteria pemilihan. Untuk memilih data secara bersyarat daripada jadual, tambah klausa WHERE pada pernyataan SELECT. Sintaks adalah seperti berikut: PILIH nama lajur DARI nama jadual WHERE nilai operator lajur Operator berikut boleh digunakan dalam klausa WHERE: =: sama dengan: tidak sama dengan >: lebih besar daripada =: lebih besar daripada atau sama dengan 1965

Ralat biasa dan penyelesaian kepada kaedah mana dalam Laravel Ralat biasa dan penyelesaian kepada kaedah mana dalam Laravel Mar 10, 2024 pm 06:03 PM

Ralat dan penyelesaian biasa untuk kaedah where dalam Laravel Dalam proses pembangunan menggunakan rangka kerja Laravel, kami sering menggunakan EloquentORM untuk mengendalikan pangkalan data. Antaranya, kaedah where adalah kaedah yang sangat biasa digunakan untuk menapis data dalam pangkalan data. Walau bagaimanapun, disebabkan kurangnya kebiasaan dengan rangka kerja Laravel atau kekurangan pemahaman mendalam tentang EloquentORM, adalah mudah untuk membuat beberapa kesilapan biasa apabila menggunakan kaedah where. Artikel ini akan memperkenalkan beberapa w biasa

See all articles