


Penemuduga: Anda masih mempunyai pemahaman yang cukup baik tentang penguncian.
Rookie me: (senyum kecil untuk menyatakan respons)
Penemuduga: Selepas menggunakan MySQL selama bertahun-tahun, apakah perangkap yang anda tidak akan lupa.
Rookie saya: Balabala mula bercakap (saya sudah sediakan soalan temuduga begini sebelum temuduga, jadi taburkan dengan air)
Di bawah, saya telah menyusun beberapa penggunaan piawai pembangunan pangkalan data berdasarkan pengalaman sebenar saya 6 "Elakkan
" untuk meringkaskan. 避免
”来概括。
1、避免在数据库中做运算
有句话叫做“别让脚趾头想事情,那是脑瓜子的职责
”,用在数据库开发中,说的就是避免让数据库做她不擅长的事情。MySQL
1. Elakkan membuat pengiraan dalam pangkalan data
Ada pepatah yang dipanggil "Jangan biarkan jari kaki anda berfikir tentang perkara, itu adalah tanggungjawab otak anda
", digunakan dalam pembangunan pangkalan data, bermaksud untuk mengelak daripada membiarkan pangkalan data melakukan perkara yang tidak sepatutnya. pandai. MySQL
tidak pandai dalam operasi matematik dan logik judgments , jadi cuba untuk tidak melakukan pengiraan dalam pangkalan data, dan pengiraan yang kompleks boleh dialihkan ke CPU bahagian program. 🎜🎜🎜2. Elakkan daripada melakukan operasi pada lajur indeks🎜🎜 🎜🎜🎜Pernah, seorang rakan sekerja meminta saya melihat SQL, mengatakan bahawa ia adalah sangat pantas untuk membuat pertanyaan di latar depan, tetapi apabila SQL dikeluarkan dan dilaksanakan dalam pangkalan data, tiada keputusan keluar selepas berjalan selama 10 minit. Selepas melihat SQL, saya akhirnya menemui subquery dalam paparan. Teks SQL subquery ini adalah seperti berikut: 🎜## 以下SQL来源于网络 SELECT acinv_07.id_item , SUM(acinv_07.dec_endqty) dec_endqty FROM acinv_07 WHERE acinv_07.fiscal_year * 100 + acinv_07.fiscal_period = ( SELECT DISTINCT ctlm1101.fiscal_year * 100 + ctlm1101.fiscal_period FROM ctlm1101 WHERE flag_curr = 'Y' AND id_oprcode = 'acinv' AND acinv_07.id_wh = ctlm1101.id_table) GROUP BY acinv_07.id_item
Lajur tahun fiskal dan lajur fiskal_tempoh pada jadual acinv_07 diindeks. Walau bagaimanapun, jika operasi dilakukan pada lajur indeks, indeks tidak akan tersedia untuk lajur yang mungkin telah diindeks. Jadi, saya menulis semula ke dalam SQL berikut:
## 以下SQL来源于网络 SELECT id_item , SUM(dec_qty) dec_qty FROM dpurreq_03 GROUP BY id_item ) a , ( SELECT a.id_item , SUM(a.dec_endqty) dec_endqty FROM acinv_07 a , ( SELECT DISTINCT ctlm1101.fiscal_year , ctlm1101.fiscal_period , id_table FROM ctlm1101 WHERE flag_curr = 'Y' AND id_oprcode = 'acinv' ) b WHERE a.fiscal_year = b.fiscal_year AND a.fiscal_period = b.fiscal_period AND a.id_wh = b.id_table GROUP BY a.id_item
Kemudian laksanakannya, dan hasilnya akan tersedia dalam masa kira-kira 4 saat. Secara umum, semasa menulis SQL, jangan lakukan pengiraan pada lajur indeks melainkan perlu.
3. Elakkan count(*)
Apabila melakukan pertanyaan paging, sesetengah orang sentiasa terbiasa menggunakan pilih count() untuk mendapatkan jumlah rekod sebenarnya approach. , kerana data telah disoal sekali sebelum ini, pilih count() adalah bersamaan dengan menanyakan pernyataan yang sama dua kali, dan overhed pada pangkalan data secara semula jadi kita harus menggunakan API yang disertakan dengan pangkalan data, atau sistem pembolehubah untuk menyelesaikan kerja.
4. Elakkan daripada menggunakan medan NULL
Apabila mereka bentuk medan jadual pangkalan data, anda harus mencuba sedaya upaya untuk menambah NOT NULL DEFAULT
'. Menggunakan medan NULL akan mempunyai banyak kesan buruk, seperti: sukar untuk mengoptimumkan pertanyaan, menambah indeks pada lajur NULL memerlukan ruang tambahan dan indeks kompaun yang mengandungi NULL adalah tidak sah...
Lihat kes berikut: NOT NULL DEFAULT
'。使用NULL字段会产生很多不好的影响,例如:很难进行查询优化、NULL列加索引,需要额外空间、含NULL复合索引无效……
看下面的案例:
数据初始化: create table table1 ( `id` INT (11) NOT NULL, `name` varchar(20) NOT NULL ) create table table2 ( `id` INT (11) NOT NULL, `name` varchar(20) ) insert into table1 values (4,"tianweichang"),(2,"zhangsan"),(3,"lisi") insert into table2 values (1,"tianweichang"),(2, null)
(1) NOT IN子查询在有NULL值的情况下返回永远为空结果,查询容易出错
select name from table1 where name not in (select name from table2 where id!=1)
(2) 列值允许为空,索引不存储null值,结果集中不会包含这些记录。
select * from table2 where name != 'tianweichang'
select * from table2 where name != 'zhaoyun1'
(3) 使用concat
select concat("1", null) from dual;(1) NOT IN subquery mengembalikan hasil yang sentiasa kosong apabila terdapat nilai NULL, dan pertanyaan adalah rawan ralat🎜
select count(name) from table2;
🎜
🎜
🎜
concat
Apabila splicing, setiap medan mesti dinilai sebagai bukan nol terlebih dahulu, jika tidak selagi mana-mana medan kosong, ia akan menyebabkan Hasil splicing adalah batal🎜select concat("1", null) from dual;
(4) 当计算count时候,name为null 的不会计入统计
select count(name) from table2;
5、避免select
使用 select *
可能会返回不使用的列的数据。它在MySQL
数据库服务器和应用程序之间产生不必要的I/O磁盘和网络流量。如果明确指定列,则结果集更可预测并且更易于管理。想象一下,当您使用 select *
并且有人通过添加更多列来更改表格数据时,将会得到一个与预期不同的结果集。使用 select *
可能会将敏感信息暴露给未经授权的用户。
6、避免在数据库里存图片
图片确实是可以存储到数据库里的,例如通过二进制流将图片存到数据库中。
但是,强烈不建议把图片存储到数据库中!!!!首先对数据库的读/写的速度永远都赶不上文件系统处理的速度,其次数据库备份变的巨大,越来越耗时间,最后对文件的访问需要穿越你的应用层和数据库层。
Atas ialah kandungan terperinci Temu bual Meituan: Apakah masalah yang anda hadapi menggunakan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

MySQL menggunakan lesen GPL. 1) Lesen GPL membolehkan penggunaan percuma, pengubahsuaian dan pengedaran MySQL, tetapi taburan yang diubah suai mesti mematuhi GPL. 2) Lesen komersial boleh mengelakkan pengubahsuaian awam dan sesuai untuk aplikasi komersil yang memerlukan kerahsiaan.

Keadaan ketika memilih innoDB dan bukannya myisam termasuk: 1) sokongan transaksi, 2) persekitaran konkurensi tinggi, 3) konsistensi data yang tinggi; Sebaliknya, keadaan apabila memilih myisam termasuk: 1) terutamanya membaca operasi, 2) Tiada sokongan transaksi diperlukan. InnoDB sesuai untuk aplikasi yang memerlukan konsistensi data yang tinggi dan pemprosesan urus niaga, seperti platform e-dagang, manakala MyISAM sesuai untuk aplikasi bacaan dan bebas transaksi seperti sistem blog.

Di MySQL, fungsi kunci asing adalah untuk mewujudkan hubungan antara jadual dan memastikan konsistensi dan integriti data. Kekunci asing mengekalkan keberkesanan data melalui pemeriksaan integriti rujukan dan operasi cascading. Perhatikan pengoptimuman prestasi dan elakkan kesilapan biasa apabila menggunakannya.

Terdapat empat jenis indeks utama dalam MySQL: Indeks B-Tree, Indeks Hash, Indeks Teks Penuh dan Indeks Spatial. 1. B-Tree Index sesuai untuk pertanyaan, penyortiran dan pengelompokan, dan sesuai untuk penciptaan pada lajur Nama Jadual Pekerja. 2. Indeks hash sesuai untuk pertanyaan yang setara dan sesuai untuk penciptaan pada lajur ID jadual hash_table enjin penyimpanan memori. 3. Indeks teks penuh digunakan untuk carian teks, sesuai untuk penciptaan pada lajur kandungan jadual artikel. 4. Indeks spatial digunakan untuk pertanyaan geospatial, sesuai untuk penciptaan pada lajur geom jadual lokasi.

TOCREATEANINDEXINMYSQL, USETHECreateIndexStatement.1) forasingLecolumn, gunakan "createIndexidx_lastNameonemployees (lastName);" 2) foracompositeIndex, gunakan "createindexidx_nameonemployees (lastName, firstName)

Perbezaan utama antara MySQL dan SQLite adalah konsep reka bentuk dan senario penggunaan: 1. MySQL sesuai untuk aplikasi besar dan penyelesaian peringkat perusahaan, menyokong prestasi tinggi dan kesesuaian yang tinggi; 2. SQLITE sesuai untuk aplikasi mudah alih dan perisian desktop, ringan dan mudah dibenamkan.

Indeks dalam MySQL adalah struktur yang diperintahkan satu atau lebih lajur dalam jadual pangkalan data, yang digunakan untuk mempercepat pengambilan data. 1) Indeks meningkatkan kelajuan pertanyaan dengan mengurangkan jumlah data yang diimbas. 2) Indeks B-Tree menggunakan struktur pokok yang seimbang, yang sesuai untuk pertanyaan dan penyortiran pelbagai. 3) Gunakan pernyataan createIndex untuk membuat indeks, seperti createIndexidx_customer_idonorders (customer_id). 4) Indeks komposit boleh mengoptimumkan pertanyaan berbilang lajur, seperti createIndexidx_customer_orderonorders (customer_id, order_date). 5) Gunakan Jelaskan untuk menganalisis rancangan pertanyaan dan elakkan

Menggunakan transaksi dalam MySQL memastikan konsistensi data. 1) Mulakan transaksi melalui starttransaction, dan kemudian laksanakan operasi SQL dan serahkannya dengan komit atau rollback. 2) Gunakan SavePoint untuk menetapkan titik simpan untuk membolehkan rollback separa. 3) Cadangan Pengoptimuman Prestasi termasuk memendekkan masa urus niaga, mengelakkan pertanyaan berskala besar dan menggunakan tahap pengasingan yang munasabah.


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

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

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa
