Rumah pangkalan data tutorial mysql 一个单引号引发的MYSQL性能问题分析

一个单引号引发的MYSQL性能问题分析

Jun 07, 2016 pm 06:03 PM
prestasi mysql petikan tunggal

刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的。

对于大型的系统而言,Oracle,SQLServer无疑是最好的选择,可看看现在越来越多的小网站,他们没有自己的服务器,只是买别人的空间和数据库,但这种小型的数据库在性能上当然和大型数据库没有对比性,但小型的数据库也要对自己的优化方式,今天和大家分享Mysql中加没加单引号的巨大区别,对于MYSQL性能优化很有意义。

刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的。问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时相差百倍!

测试表:
代码如下:
CREATE TABLE `foo` ( `key` varchar(10) NOT NULL, `time` int(11) NOT NULL, PRIMARY KEY (`key`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

然后插入30多万条数据,然后执行下面的SQL语句:
代码如下:
SELECT *FROM `foo`WHERE `key` =1293322797

查询花费 0.1288 秒,大约花费这么久的时间,然后,给1293322797加上单引号:
代码如下:
SELECT *FROM `foo`WHERE `key` ='1293322797'

查询花费 0.0009 秒,基本上相差100倍!!!也就是说不加单引号MYSQL性能损失了100倍,很震撼的比例!

后来用EXPLAIN分别跑了一下上面两条语句,见下面两张图:


没有单引号时


有单引号时

很明显,不使用单引号没有用上主索引,并进行了全表扫描,使用单引号就能使用上索引了。
后来我用大于分别进行了测试,返回的结果集相同,而他们的耗时和上面一样,用EXPLAIN测试,也和上面一样
代码如下:
SELECT *FROM `foo`WHERE `key` >1293322797SELECT *FROM `foo`WHERE `key` >'1293322797'

加单引号和不加单引号就是这么大的差别!就是会对mysql性能产生这么大的影响。
再后来,我将字段`key`换成INT类型,这时候,加不加单引号,就没有什么差别了,EXPLAIN显示他们都同样能够用上主索引,只是key_len变短了。

就是这些,综上所述,我们在写SQL查询的时候还是不厌其烦的加上单引号吧,似乎那没有坏处。

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Bagaimana untuk mengoptimumkan prestasi SQL Server dan MySQL supaya mereka boleh melakukan yang terbaik? Bagaimana untuk mengoptimumkan prestasi SQL Server dan MySQL supaya mereka boleh melakukan yang terbaik? Sep 11, 2023 pm 01:40 PM

Bagaimana untuk mengoptimumkan prestasi SQLServer dan MySQL supaya mereka boleh melakukan yang terbaik? Abstrak: Dalam aplikasi pangkalan data hari ini, SQLServer dan MySQL adalah dua sistem pengurusan pangkalan data hubungan (RDBMS) yang paling biasa dan popular. Memandangkan jumlah data meningkat dan keperluan perniagaan terus berubah, mengoptimumkan prestasi pangkalan data menjadi sangat penting. Artikel ini akan memperkenalkan beberapa kaedah dan teknik biasa untuk mengoptimumkan prestasi SQLServer dan MySQL untuk membantu pengguna memanfaatkan

Bagaimana untuk meningkatkan prestasi MySQL dengan menggunakan indeks komposit Bagaimana untuk meningkatkan prestasi MySQL dengan menggunakan indeks komposit May 11, 2023 am 11:10 AM

Dalam pangkalan data MySQL, pengindeksan adalah cara yang sangat penting untuk pengoptimuman prestasi. Apabila jumlah data dalam jadual meningkat, indeks yang tidak sesuai boleh menyebabkan pertanyaan menjadi perlahan atau malah menyebabkan ranap pangkalan data. Untuk meningkatkan prestasi pangkalan data, indeks perlu digunakan secara rasional apabila mereka bentuk struktur jadual dan pernyataan pertanyaan. Indeks komposit ialah teknologi pengindeksan yang lebih maju yang meningkatkan kecekapan pertanyaan dengan menggabungkan berbilang medan sebagai indeks. Dalam artikel ini, kami akan memperincikan cara meningkatkan prestasi MySQL dengan menggunakan indeks komposit. Apakah komposit indeks komposit

Bagaimana untuk menyelesaikan masalah bahawa petikan berganda tidak boleh dimasukkan dalam mesin maya RedHat? Bagaimana untuk menyelesaikan masalah bahawa petikan berganda tidak boleh dimasukkan dalam mesin maya RedHat? Dec 30, 2023 pm 08:01 PM

Saya tidak tahu tetapan apa yang diubah suai hari ini Semasa saya menulis program dalam vim, saya mendapati bahawa petikan tunggal atau petikan berganda tidak boleh ditaip. Kesan tanda petikan berganda ialah ¨¨, yang akan menyebabkan ralat program! Punca masalah ini ialah susun atur papan kekunci tidak sepadan dengan keadaan sebenar dan perlu diubah suai. Penyelesaian kepada tanda petikan tunggal/ganda yang tidak boleh ditaip: (Nota: Jika desktop anda dalam bahasa Inggeris, sila terjemahkannya sendiri.) 1. Klik Sistem-->Pilih Pengurusan-->Pilih Papan Kekunci dan tukar American International kepada American gaya! 2. Klik Sistem-->Pilih Keutamaan-->Pilih Papan Kekunci. Semak sama ada tetapan adalah konsisten dengan gambar di bawah: Kemudian buka semula alat vim dan masalahnya harus diselesaikan!

Analisis peraturan penggunaan petikan tunggal dan petikan berganda dalam PHP Analisis peraturan penggunaan petikan tunggal dan petikan berganda dalam PHP Mar 05, 2024 pm 09:30 PM

Dalam PHP, petikan tunggal dan petikan berganda ialah dua kaedah pembalut rentetan biasa, dan ia mempunyai ciri dan peraturan yang berbeza apabila digunakan. Artikel ini akan menganalisis peraturan penggunaan petikan tunggal dan petikan berganda masing-masing dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik perbezaan mereka. 1. Peraturan untuk menggunakan petikan tunggal: Kandungan dalam petikan tunggal akan dikeluarkan seperti sedia ada, dan pembolehubah atau aksara melarikan diri tidak akan dihuraikan. Ini bermakna bahawa dalam petikan tunggal, PHP mengiktiraf rentetan sebagai urutan aksara biasa dan tidak melakukan apa-apa dengan kandungan. dalam petikan tunggal

Bagaimanakah indeks kardinaliti mempengaruhi prestasi pertanyaan di MySQL? Bagaimanakah indeks kardinaliti mempengaruhi prestasi pertanyaan di MySQL? Apr 03, 2025 am 12:09 AM

Kardinaliti indeks mempunyai kesan yang signifikan terhadap prestasi pertanyaan MySQL. Indeks kardinaliti yang tinggi boleh mencari data lebih cepat dan mengoptimumkan pertanyaan; Indeks kardinaliti yang rendah boleh menyebabkan pengimbasan meja penuh. Prestasi pertanyaan boleh diperbaiki dengan berkesan dengan mengemas kini statistik secara berkala, memilih jenis indeks yang sesuai, mengelakkan indeks over dan menggunakan indeks over.

Apakah sebab -sebab biasa prestasi pertanyaan MySQL yang lemah? Apakah sebab -sebab biasa prestasi pertanyaan MySQL yang lemah? Apr 12, 2025 am 12:11 AM

Sebab -sebab utama prestasi pertanyaan MySQL yang lemah termasuk tidak menggunakan indeks, pemilihan pelan pelaksanaan yang salah oleh pengoptimasi pertanyaan, reka bentuk jadual yang tidak munasabah, jumlah data yang berlebihan dan persaingan kunci. 1. Tiada indeks menyebabkan pertanyaan perlahan, dan menambah indeks dapat meningkatkan prestasi dengan ketara. 2. Gunakan perintah Jelaskan untuk menganalisis pelan pertanyaan dan cari ralat pengoptimuman. 3. Membina semula struktur meja dan mengoptimumkan keadaan gabungan dapat meningkatkan masalah reka bentuk jadual. 4. Apabila jumlah data adalah besar, pembahagian dan strategi bahagian meja diterima pakai. 5. Dalam persekitaran konkurensi yang tinggi, mengoptimumkan urus niaga dan strategi mengunci dapat mengurangkan persaingan kunci.

Bagaimana untuk meningkatkan prestasi MySQL dengan Penganalisis Masa Pertanyaan Bagaimana untuk meningkatkan prestasi MySQL dengan Penganalisis Masa Pertanyaan May 11, 2023 am 09:25 AM

MySQL ialah sistem pengurusan pangkalan data hubungan yang digunakan secara meluas Oleh kerana prestasi tinggi, skalabiliti dan sifat sumber terbuka, ia telah menjadi pilihan pertama bagi banyak perusahaan dan individu. Walau bagaimanapun, apabila jumlah data terus meningkat dan kerumitan data terus meningkat, masalah prestasi MySQL mula muncul. Salah satu isu prestasi penting ialah masa pertanyaan. Masa pertanyaan merujuk kepada masa yang diperlukan untuk pertanyaan MySQL. Lebih pendek masa pertanyaan, lebih tinggi prestasi MySQL dan keupayaan untuk mengendalikan lebih banyak permintaan pertanyaan. Untuk menangani masalah ini, kita boleh menganalisis masa pertanyaan

Bagaimana untuk meningkatkan prestasi MySQL dengan tahap pengasingan transaksi Bagaimana untuk meningkatkan prestasi MySQL dengan tahap pengasingan transaksi May 11, 2023 am 09:33 AM

Dalam MySQL, tahap pengasingan transaksi adalah konsep yang sangat penting, yang menentukan cara pangkalan data mengendalikan akses serentak kepada data apabila berbilang transaksi dilaksanakan pada masa yang sama. Dalam aplikasi praktikal, kita perlu memilih tahap pengasingan yang sesuai berdasarkan keperluan perniagaan tertentu untuk meningkatkan prestasi MySQL. Pertama, kita perlu memahami empat tahap pengasingan transaksi MySQL: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ dan SERIALIZA

See all articles