MySQL'in gizli özellikleri


15

Gizli özelliklere sahip olma geleneğinde, MySQL'de gizli özelliklerin bir listesine sahip olalım.

Her cevap için bir özellik ekleyin.

Ayrıca Bkz:
Linux'un
Gizli Özellikleri PowerShell'in
Gizli Özellikleri Oracle Veritabanının
Gizli Özellikleri Windows 2008'in
Gizli Özellikleri Solaris / OpenSolaris'in
Gizli Özellikleri SQL Server'ın
Gizli Özellikleri IIS'nin Gizli Özellikleri (6.0 / 7.0)

Yanıtlar:


9

Sık kullanılmayan ama daha ayrıntılı

TAM İŞLEME LİSTESİNİ GÖSTER

kullanışlı, ancak müthiş kurumsal olmayan sorgu analizcisi kadar iyi değil - böyle etkinleştirin

    mysql> profil oluşturma = 1;
    Sorgu tamam, 0 satır etkilendi (0.00 sn)

Bu ikisi profil tablosunu doldurmak için önemsiz sorgulardır,

        
    mysql> _test.customers'dan * seçin;
    HATA 1146 (42S02): '_test.customers' tablosu mevcut değil

    mysql> test * 'den * seçin. müşteri sınırı 0;
    Boş set (0,00 sn.)
    

Profilli tüm sorguların ve sürelerinin bir listesini alın

        
    mysql> profilleri göster;
    + ---------- + ------------ + ------------------------- ------ +
    | Sorgu_kimliği | Süre | Sorgu |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | _test.customers adresinden * seçin |
    | 2 | 0.01546500 | test.customers adresinden * seçin |
    + ---------- + ------------ + ------------------------- ------ +

Son sorguya ilişkin görüntüleme bilgileri yalnızca "profili göster" olacaktır - veya bir sorgu belirleyebilirsiniz

  
    mysql> sorgu 2 için profili göster;
    + ---------------------- + ---------- +
    | Durum | Süre |
    + ---------------------- + ---------- +
    | başlangıç ​​| 0.000053 |
    | izinleri denetleme | 0.000007 |
    | Açılış masaları | 0.000014 |
    | Sistem kilidi | 0.000006 |
    | Masa kilidi | 0.000008 |
    | init | 0.000065 |
    | optimizasyon | 0.000003 |
    | yürütme | 0.000201 |
    | sonu | 0.000003 |
    | sorgu sonu | 0.000002 |
    | eşyaların boşaltılması | 0.000020 |
    | günlüğe kaydetme yavaş sorgu | 0.000002 |
    | temizlik | 0.000004 |
    + ---------------------- + ---------- +
    Sette 13 satır (0.00 sn)

Diğerlerinin yanı sıra CPU, BLOCK IO ve SWAPS gibi özel bilgiler de isteyebilirsiniz ( tümü man sayfasında )

  
    mysql> sorgu 2 için profil işlemci göster;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | Durum | Süre | CPU_user | CPU_system |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | başlangıç ​​| 0.000056 | 0.001000 | 0.000000 |
    | izinleri denetleme | 0.000007 | 0.000000 | 0.000000 |
    | Açılış masaları | 0.000010 | 0.000000 | 0.000000 |
    | Sistem kilidi | 0.000005 | 0.000000 | 0.000000 |
    | Masa kilidi | 0.000007 | 0.000000 | 0.000000 |
    | init | 0.000059 | 0.000000 | 0.000000 |
    | optimizasyon | 0.000003 | 0.000000 | 0.000000 |
    | istatistikleri | 0.015022 | 0.000000 | 0.000000 |
    | hazırlama | 0.000014 | 0.001000 | 0.000000 |
    | yürütme | 0.000004 | 0.000000 | 0.000000 |
    | Veri gönderme | 0.000245 | 0.000000 | 0.000000 |
    | sonu | 0.000004 | 0.000000 | 0.000000 |
    | sorgu sonu | 0.000002 | 0.000000 | 0.000000 |
    | eşyaların boşaltılması | 0.000021 | 0.000000 | 0.000000 |
    | günlüğe kaydetme yavaş sorgu | 0.000002 | 0.000000 | 0.000000 |
    | temizlik | 0.000004 | 0.000000 | 0.000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    Sette 16 satır (0.00 sn)

Günlüğe kaydetme yükü eklediğinden, daha sonra devre dışı bırakmayı unutmayın.

  
    mysql> profil oluşturma = 0;
    Sorgu tamam, 0 satır etkilendi (0.00 sn)

tüm profil oluşturma verilerini göstermek için QUERY X İÇİN TÜM PROFİLİ GÖSTER seçeneğini de kullanabilirsiniz.
Kedare

8

Her zaman yaygın olarak bilinmeyen veya hatırlanmayan bazı MySQL komutları .

Kolay okuma ve yapıştırma için sonuç kümesi yönünü dikey olarak değiştirin.

mysql> SELECT CURDATE(), CURTIME()\G
*************************** 1. row ***************************
CURDATE(): 2009-06-26
CURTIME(): 12:10:37

Şu anda yazdığınız sorguyu geçmişinizde bırakırken iptal edin.

mysql> SELECT CURDATE(), CURTIME()\c
mysql>

En sevdiğiniz $ EDITOR ile bir sorguyu veya son sorguyu (sırasıyla) düzenleyin.

mysql> SELECT CURDATE(), CURTIME()\e
mysql> \e

Konsol çıkışını temizleyin.

mysql> \! clear

Sonuç kümelerini MD5 karma ile karşılaştırın.

mysql> pager md5sum -
PAGER set to 'md5sum -'
mysql> SELECT CURDATE(), CURTIME();
d24e22e4e2d33dfda9f01ba934b7676a  -
mysql> nopager
PAGER set to stdout

İsteminizi değiştirin.

mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(dan@localhost) [test]>

Komut geçmişinizde belirli bir dize arayın (Bash gibi).
Bir arama terimi yazmaya başlayın ve sonuçlar arasında dolaşmak için ^ R tuşunu tekrarlayın.

^R
(reverse-i-search)`DATE': SELECT CURDATE(), CURTIME();

Md5sum'da +1. md5sum -Çağrı cihazı olarak kullanma fikrini seviyorum . Gerçekten mysql özgü sen
serverhorror

4

Bazıları için yararlı olabilecek öğrendiğim hileler:

Daha önce kaydettiğiniz dosyayı çalıştırmak için:

source filename      # Alternatively you can enter "\\. filename".

"\!" Kullanın kabuk komutlarına erişmek için. Örneğin:

\\! ls c*sql   # To list all your SQL files in directory starting with "c".

Dolayısıyla, ifadenizi bir dosyaya yazmak istiyorsanız (düzenleyici seçeneğini kullanmadan) şunları girebilirsiniz:

\\! echo 'select * from emp where job ="salesman" '   > test2.sql   # Editor option seems easier to me though!

Girerseniz

\\T filename

ifadelerinizin ve sorgu sonuçlarınızın belirttiğiniz dosya adına yönlendirilmesini / yazdırılmasını sağlayabilirsiniz. \\tBunu kapatmak için kullanın .

\\G";" Yerine sorguyu sonlandırma Çıktıyı sütunlar yerine satır biçiminde göstermek için.

SHOW deyimi ile Where ... LIKE yan tümcesi kullanarak dışlama. Örneğin:

SHOW STATUS LIKE '%cache%';

Son olarak, my.cnfdosya kullanımına bakmadan MySQL veri dizininizin konumunu bulmak için :

SHOW VARIABLES LIKE 'datadir';

3

Ben şahsen SHOWemri seviyorum

Yapabileceğiniz
SHOW PROCESSLIST- mysql için çalışan tüm bağlantıları
SHOW CREATE TABLE TableNamegörmek için
SHOW CREATE PROCEDURE ProcedureName- Tablo oluşturmak için kullanılan sql görmek için
SHOW VARIABLES- SP oluşturmak için kullanılan sql görmek için - Tüm sistem değişkenlerini görmek için

Tam listeyi buradan edinin


1
SHOW ve EXPLAIN gibi iyi bilinen ve belgelenmiş komutları "gizli özellikler" olarak listeleyerek biraz şaşkınım. Gizli bir özellik belgelenmemiş bir özellik değil mi?
John Gardeniers

Niyet, çok iyi bilinmeyen faydalı komutları ortaya çıkarmaktır, biri tarafından iyi bilinebilecek başka biri tarafından bilinmeyen ne olabilir?
Binoj Antony

3

Aslında belgelenmiş , ancak çok sinir bozucu: yanlış veriler için otomatik tarih dönüşümleri.

MySQL 5.0.2'den önce, MySQL yasadışı veya uygunsuz veri değerlerini affeder ve veri girişi için yasal değerlere zorlar. MySQL 5.0.2 ve sonraki sürümlerinde, bu varsayılan davranış olarak kalır, ancak sunucu SQL modunu değiştirebilir, böylece sunucu bunları reddeder ve içinde bulundukları ifadeyi iptal eder.

Bazen MySQL, girdiyi yakındaki geçerli tarihlere ayarlamaz, bunun yerine 0000-00-00tanım gereği geçersiz olarak saklarsa "şanslı" olursunuz . Ancak, o zaman bile, bu değeri sizin için sessizce saklamak yerine MySQL'in başarısız olmasını isteyebilirsiniz.


3

MySQL'i diğer veritabanlarından ayıran bir diğer özellik de REPLACE INTOkomuttur. Yapabilirsin:

REPLACE INTO T1 (Col1, Col2 )
SELECT Col1, Col2 FROM T2;

Replace deyimini, tıpkı update deyimini yazdığınız gibi yazabilirsiniz:

REPLACE INTO T1 
SET Col1 = 'SomeValue1'
, Col2   = 'SomeValue2'

1
REPLACE INTO yararlıdır, ancak bir anahtar kontrolü gerçekleştirdiğine dikkat edilmelidir, eğer eşleşen bir anahtar bulunursa DELETEs ve nihayet INSERT'lerden çok daha uzun sürüyor INSERT ... ON DUPLICATE KEY UPDATE
Andy

2

Gerçekten gizli bir özellik değil, ancak daha az biliniyor ve bir UPDATE veya INSERT yapmadan önce bir şey olup olmadığını kontrol etmek için bir sorgu yaparak kaydetmek için çok kullanıyorum

INSERT ... ON DUPLICATE KEY UPDATE

Belgeler burada


1

Sorgu yürütme planını görmek için şunu kullanın: EXPLAIN

Örneğin

EXPLAIN 
SELECT T1.Col1, T2.Col2
FROM T1 INNER JOIN T2 ON T1.Id = T2.Id
WHERE T1.Col3 = 10

1

Gerçekten gizli değil, ancak yavaş sorgu günlüğü , en yoğun zamanlarda performans sorunlarının nedenini takip etmede gerçekten yardımcı olabilir.

Dosyada my.cnf[mysqld] bölümü - ekle:

log_slow_queries=/var/log/mysql/mysql-slow.log
# log queries that took more than 1 sec
long_query_time = 1


0

PQD'nin cevabına ek olarak (bir noobie olarak henüz bir yorum ekleyemiyorum), doğru my.cnf dosyasındaki yavaş sorgu günlüğüne henüz yol eklemediyseniz, hata günlüğü veri dizinine yazılır ('datadir' GİBİ DEĞİŞKENLERİ GÖSTER seçeneğini kullanın; bunun nerede olduğunu bulmak için) ve dosya adı [systemname] -slow.log biçiminde olacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.