【连载】关系型数据库是如何工作的?(11)
在重写这一步,我们拿到了查询SQL的内部表示,重写的目的是: 预优化SQL 避免不必要的操作 帮助优化器找到尽可能好的解决方案 重写器会在查询上匹配一系列规则,如果匹配一个规则就应用它重写查询,以下是部分可选的规则: 视图合并:如果你在查询中用了视图
在重写这一步,我们拿到了查询SQL的内部表示,重写的目的是:
- 预优化SQL
- 避免不必要的操作
- 帮助优化器找到尽可能好的解决方案
重写器会在查询上匹配一系列规则,如果匹配一个规则就应用它重写查询,以下是部分可选的规则:
- 视图合并:如果你在查询中用了视图,那么视图就会被转换为一段代码;
- 优化子查询:由于一个子查询非常难以优化,因此重写器会修改子查询并删除子查询。
例如:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">SELECT</span> PERSON.* <span class="hljs-keyword">FROM</span> PERSON <span class="hljs-keyword">WHERE</span> PERSON.person_key <span class="hljs-keyword">IN</span> (<span class="hljs-keyword">SELECT</span> MAILS.person_key <span class="hljs-keyword">FROM</span> MAILS <span class="hljs-keyword">WHERE</span> MAILS.mail <span class="hljs-keyword">LIKE</span> <span class="hljs-string">'christophe%'</span>);</span></code>
会被重写器转换为:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">SELECT</span> PERSON.* <span class="hljs-keyword">FROM</span> PERSON, MAILS <span class="hljs-keyword">WHERE</span> PERSON.person_key = MAILS.person_key <span class="hljs-keyword">and</span> MAILS.mail <span class="hljs-keyword">LIKE</span> <span class="hljs-string">'christophe%'</span>;</span></code>
- 移除不必要的操作:如果在某个或某组字段上使用了DISTINCT关键字,但是同时在这些字段上又增加了防止数据不唯一的唯一性约束,则重写器会移除DISTINCT;
- 移除多余的join:如果两次使用同一个join条件(可能是一个join条件被视图所隐藏),或者可能因为传递性导致一个不必要的join,它们都会被移除;
- 数学常量代换:如果你使用了一些数学运算,那么它只会被重写器计算一次。例如WHERE AGE > 10+2会被转换为WHERE AGE > 12、TODATE(“some date”) 会被转换为DateTime类型的日期;
- (高级)分区优化:如果你使用的是分区表,重写器会找到实际使用的分区;
- (高级)物化视图重写:如果有物化视图匹配查询的子集,重写器会检查其是否是最新的,并用物化视图替换实际的表;
- (高级)定制规则:如果你为了修改查询(像Oracle策略)定制了一些规则,重写器会执行这些规则;
重写后的查询会被转发给优化器继续处理。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Muat turun versi terbaharu aplikasi tempahan tiket 12306 Ia adalah perisian pembelian tiket perjalanan yang semua orang sangat berpuas hati dengannya -pengesahan nama untuk membeli tiket dalam talian Semua pengguna Anda boleh membeli tiket perjalanan dan tiket penerbangan dengan mudah dan menikmati diskaun yang berbeza. Anda juga boleh mula menempah tempahan terlebih dahulu untuk merebut tiket Anda boleh menempah hotel atau pemindahan kereta khas Dengan itu, anda boleh pergi ke mana-mana yang anda mahu pergi dan membeli tiket dengan satu klik lebih mudah dan memudahkan semua orang lebih selesa. Kini editor memperincikannya dalam talian Menyediakan 12306 pengguna cara untuk melihat rekod pembelian tiket sejarah. 1. Buka Keretapi 12306, klik Saya di sudut kanan bawah, dan klik Pesanan Saya 2. Klik Dibayar pada halaman pesanan. 3. Pada halaman berbayar

Bagaimana untuk menyemak kelayakan akademik saya di Xuexin.com? Anda boleh menyemak kelayakan akademik anda di Xuexin.com Ramai pengguna tidak tahu cara menyemak kelayakan akademik mereka di Xuexin.com Seterusnya, editor membawakan tutorial grafik kepada pengguna tentang cara menyemak kelayakan akademik mereka di Xuexin.com pengguna datang dan lihat! Tutorial penggunaan Xuexin.com: Cara menyemak kelayakan akademik anda di Xuexin.com 1. Pintu masuk Xuexin.com: https://www.chsi.com.cn/ 2. Pertanyaan laman web: Langkah 1: Klik pada alamat Xuexin.com di atas untuk masuk ke laman utama Klik [Education Query]; Langkah 4: Pada halaman log masuk Masukkan maklumat dan klik [Log Masuk];

Pemetaan polimorfik hibernate boleh memetakan kelas yang diwarisi ke pangkalan data dan menyediakan jenis pemetaan berikut: subkelas bercantum: Cipta jadual berasingan untuk subkelas, termasuk semua lajur kelas induk. table-per-class: Cipta jadual berasingan untuk subkelas, yang mengandungi hanya lajur khusus subkelas. union-subclass: serupa dengan joined-subclass, tetapi jadual kelas induk menggabungkan semua lajur subclass.

Keluaran terbaharu Apple bagi sistem iOS18, iPadOS18 dan macOS Sequoia telah menambah ciri penting pada aplikasi Photos, yang direka untuk membantu pengguna memulihkan foto dan video yang hilang atau rosak dengan mudah disebabkan pelbagai sebab. Ciri baharu ini memperkenalkan album yang dipanggil "Dipulihkan" dalam bahagian Alat pada apl Foto yang akan muncul secara automatik apabila pengguna mempunyai gambar atau video pada peranti mereka yang bukan sebahagian daripada pustaka foto mereka. Kemunculan album "Dipulihkan" menyediakan penyelesaian untuk foto dan video yang hilang akibat kerosakan pangkalan data, aplikasi kamera tidak disimpan ke pustaka foto dengan betul, atau aplikasi pihak ketiga yang menguruskan pustaka foto. Pengguna hanya memerlukan beberapa langkah mudah

Dalam Go, kaedah mengatasi membenarkan kaedah dalam kelas asas ditakrifkan semula dalam kelas terbitan sambil mengekalkan tandatangan kaedah yang sama: gunakan kata kunci ganti. Kaedah ganti mesti mempunyai tandatangan yang sama dengan kaedah asas. Jenis penerima kaedah yang diganti mestilah subjenis daripada jenis asas.

Untuk mengendalikan ralat sambungan pangkalan data dalam PHP, anda boleh menggunakan langkah berikut: Gunakan mysqli_connect_errno() untuk mendapatkan kod ralat. Gunakan mysqli_connect_error() untuk mendapatkan mesej ralat. Dengan menangkap dan mengelog mesej ralat ini, isu sambungan pangkalan data boleh dikenal pasti dan diselesaikan dengan mudah, memastikan kelancaran aplikasi anda.

Cara menggunakan MySQLi untuk mewujudkan sambungan pangkalan data dalam PHP: Sertakan sambungan MySQLi (require_once) Cipta fungsi sambungan (functionconnect_to_db) Fungsi sambungan panggilan ($conn=connect_to_db()) Laksanakan pertanyaan ($result=$conn->query()) Tutup sambungan ( $conn->close())

HTML tidak boleh membaca pangkalan data secara langsung, tetapi ia boleh dicapai melalui JavaScript dan AJAX. Langkah-langkah termasuk mewujudkan sambungan pangkalan data, menghantar pertanyaan, memproses respons dan mengemas kini halaman. Artikel ini menyediakan contoh praktikal menggunakan JavaScript, AJAX dan PHP untuk membaca data daripada pangkalan data MySQL, menunjukkan cara untuk memaparkan hasil pertanyaan secara dinamik dalam halaman HTML. Contoh ini menggunakan XMLHttpRequest untuk mewujudkan sambungan pangkalan data, menghantar pertanyaan dan memproses respons, dengan itu mengisi data ke dalam elemen halaman dan merealisasikan fungsi HTML membaca pangkalan data.
