Karakter seti kodlaması nedeniyle bir MySQL veritabanı dizini hatasını hatırlayın

Genel Bakış

Bugün, aynı SQL ve aynı miktarda verinin geliştirme geribildirimi, ancak kapsamlı test ortamında 140 saniyeden fazla, geliştirme ortamında ise sadece 1 saniyeden fazla sürüyor. Nedeni nedir? Hadi birlikte bir göz atalım ~

Problem sql

Ty.IS_FIXATION'ı isFixation OLARAK SEÇİN, ty.INSPECTION_RULES NULL OLMADIĞINDA VE ty.IS_INSPECTION = 'Y' SONRA 'Kontrol edilmez FROM t_ams_asset_card t LEFT JOIN T_AMS_ASSET_TYPE ty ON ty.TYPE_NO = t.ASSET_TYPE AND t.FINANCE_CODE = ty.ORG_CODE Hr_employee e ON t.USE_MAN = e.EMPLOYEE_CODE AÇIK LEFT JOIN NEREDE t.ASSET_MODULE = 'KENDİ' VE t.IS_DELETE = 'N'

Karşılaştırıldı:

Fikir: Bu duruma genellikle hiçbir dizin veya dizin hatası neden olur.

1. Uygulama planını karşılaştırın

Burada uygulama planını açıklamak + sql ile görüntülemek için

2. Her iki taraftaki çevre endeksini kontrol edin

Her iki ortamda da dizinlerin olduğu ve bu durumda dizinlerden birinin geçersiz olması gerektiği tespit edilebilir ..

3. Dizinlerin zorunlu kullanımı

Burada kuvvet indeksini (HR_EMPLOYEE_U1) deneyin ve zorunlu indeksin de geçersiz olduğunu bulun. İndeks neden burada başarısız oluyor?

4. Tablo depolama motorunu, tablo alanı veri türünü, tablo alanı karakter setini kontrol edin

Genel olarak, dizin hataları, farklı tablo depolama motorları, alan veri türleri veya karakter kümelerinin neden olduğu örtük dönüştürmelerdir.

hr_employee'den tam sütunları göster; t_ams_asset_card'dan tam sütunları göster;

5. Karakter seti kodlamasını değiştirdikten sonra test edin

SEÇ c.TABLE_SCHEMA 'veritabanı', c.TABLE_NAMEtable ', c.COLUMN_NAME "Alan", c.COLUMN_DEFAULT'default değeri ', c.IS_NULLABLE 'boş mu', c.DATA_TYPE 'Alan Türü', c.character_set_name 'orijinal karakter kümesi', c.collation_name'orijinal harmanlama ', CONCAT ( 'TABLOYU DEĞİŞTİR', TABLE_SCHEMA, ".", TABLO İSMİ, 'SÜTUNU DEĞİŞTİRİN', SÜTUN ADI, '', COLUMN_TYPE, 'KARAKTER SETİ utf8mb4 COLLATE utf8mb4_general_ci', DURUM NE ZAMAN c.is_nullable = 'HAYIR' BU DURUMDA 'BOŞ DEĞİL' BAŞKA 'BOŞ' SON, DURUM NE ZAMAN c.COLUMN_DEFAULT = '' SONRA 'VARSAYILAN''''' C.COLUMN_DEFAULT BOŞ OLDUĞUNDA 'VARSAYILAN NULL' BAŞKA concat ('VARSAYILAN', '' '', c.COLUMN_DEFAULT, '' '') SON, 'yorum Yap', '' '', c.COLUMN_COMMENT, '' '', ';' ) 'SQL'i Değiştir' FROM information_schema.`COLUMNS` c NEREDE table_name = 'hr_employee' ve table_schema = 'lcp_db' AND CHARACTER_SET_NAME = 'utf8';

6. Yürütme planını tekrar görüntüleyin

Ayarlamadan sonra, indeksin kullanıldığı ve SQL yürütmesinin de talebi karşılayan 1 saniye içinde olduğu bulundu.

Faydalı bulursanız, lütfen iletmeye yardım edin! Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Zabbix4.2'ye göre Windows CPU kullanımını ve disk GÇ'sini izleme
önceki
Mavericks'in elektrikli arabalarının 2020'den önce sadece Mingbang elektrikli arabaları olarak adlandırılabileceği ortaya çıktı
Sonraki
Oracle12c bağlantı kimlik doğrulama protokolü hakkında - ORA-28040
Tavşan yetiştirmek için günlük Python eğitimi
Koleksiyona değer bir Oracle gerçekleştirilmiş görünüm yeniden yapılandırma planını paylaşın
Linux disklerini otomatik olarak keşfedin ve zabbix4.2'ye dayalı Linux disk GÇ'sini izleyin
MySQL, veritabanı tablosunun frm dosyasını ve ibd dosyasını yanlışlıkla siler mi? Böyle geri yüklemeyi dene
Mysql deneme-Veritabanı tablosu .frm dosyasını yanlışlıkla sildim, ancak .ibd dosyasını nasıl geri yükleyebilirim?
Zabbix4.2'ye dayalı Linux sunucusu TCP bağlantı durumu izleme uygulaması
Dokuzdan dokuza çarpım tablosunun günlük Python uygulaması
Xiaomi uçmak için açık kaynaklı bir WEB grafik aracını paylaşın - SQL tek tuş optimizasyonunu destekleyin
Python günlük alıştırması nasıl kopyalanır
Bir MySQL deneyinden performance_schema / information_schema yetkilendirmesini görmek için
Xiaomi uçurumunu paylaşın SQL optimizasyonu ve yeniden yazma için tek tıkla optimizasyon aracı ile otomatikleştirilmiş araç
To Top