MySQL की छिपी विशेषताएं


15

छिपी हुई विशेषताएं होने की लंबी परंपरा में, हमारे पास MySQL में छिपी हुई विशेषताओं की एक सूची है।

प्रति उत्तर एक फीचर लगाओ।

इन्हें भी देखें:
लिनक्स के
छिपे हुए फ़ीचर पॉवरशेल के
छिपे हुए फ़ीचर Oracle डेटाबेस के
छिपे हुए फ़ीचर विंडोज 2008 के
छिपे हुए फ़ीचर Solaris / OpenSolaris के
छिपे हुए फीचर्स SQL ​​सर्वर
हिडन फीचर्स IIS (6.0 / 7.0)

जवाबों:


9

अक्सर अप्रयुक्त लेकिन अधिक क्रिया

पूरी प्रक्रिया का पता लगाएं

काम है, लेकिन नहीं के रूप में अच्छा के रूप में अच्छा गैर उद्यम क्वेरी विश्लेषक - ऐसा सक्षम करें

    mysql> सेट प्रोफाइलिंग = 1;
    क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.00 सेकंड)

प्रोफ़ाइल तालिका को भरने के लिए ये दोनों जंक प्रश्न हैं,

        
    mysql> _test.customers से * select करें;
    त्रुटि 1146 (42S02): तालिका '_test.customers' मौजूद नहीं है

    mysql> test.customers limit 0 से * का चयन करें;
    खाली सेट (0.00 सेकंड)
    

सभी प्रश्नों की सूची और उनकी अवधि की जानकारी प्राप्त करें

        
    mysql> प्रोफ़ाइल दिखाएं;
    + ---------- + ------------ + ------------------------- ------ +
    | Query_ID | अवधि | क्वेरी |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | चयन करें * _test.customers से |
    | 2 | 0.01546500 | test.customers से * का चयन करें
    + ---------- + ------------ + ------------------------- ------ +

अंतिम क्वेरी के लिए प्रदर्शन जानकारी केवल "शो प्रोफ़ाइल" होगी - या आप एक क्वेरी निर्दिष्ट कर सकते हैं

  
    mysql> क्वेरी 2 के लिए प्रोफ़ाइल दिखाएं;
    + ---------------------- + ---------- +
    | स्थिति | अवधि |
    + ---------------------- + ---------- +
    | शुरू | 0.000053 |
    | जाँच की अनुमति | 0.000007 |
    | ओपनिंग टेबल | 0.000014 |
    | सिस्टम लॉक | 0.000006 |
    | टेबल लॉक | 0.000008 |
    | init | 0.000065 |
    | अनुकूलन | 0.000003 |
    | निष्पादन | 0.000201 |
    | अंत | 0.000003 |
    | क्वेरी अंत | 0.000002 |
    | मुक्त आइटम | 0.000020 |
    | लॉगिंग धीमी क्वेरी | 0.000002 |
    | सफाई | 0.000004 |
    + ---------------------- + ---------- +
    सेट में 13 पंक्तियाँ (0.00 सेकंड)

आप विशिष्ट जानकारी जैसे सीपीयू, ब्लॉक आईओ और अन्य लोगों के बीच अनुरोध कर सकते हैं ( सभी मैन पेज पर )

  
    mysql> क्वेरी 2 के लिए प्रोफ़ाइल सीपीयू दिखाएं;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | स्थिति | अवधि | CPU_user | CPU_system |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | शुरू | 0.000056 | 0.001000 | 0.000000 |
    | जाँच की अनुमति | 0.000007 | 0.000000 | 0.000000 |
    | ओपनिंग टेबल | 0.000010 | 0.000000 | 0.000000 |
    | सिस्टम लॉक | 0.000005 | 0.000000 | 0.000000 |
    | टेबल लॉक | 0.000007 | 0.000000 | 0.000000 |
    | init | 0.000059 | 0.000000 | 0.000000 |
    | अनुकूलन | 0.000003 | 0.000000 | 0.000000 |
    | आँकड़े | 0.015022 | 0.000000 | 0.000000 |
    | तैयारी | 0.000014 | 0.001000 | 0.000000 |
    | निष्पादन | 0.000004 | 0.000000 | 0.000000 |
    | डाटा भेजना | 0.000245 | 0.000000 | 0.000000 |
    | अंत | 0.000004 | 0.000000 | 0.000000 |
    | क्वेरी अंत | 0.000002 | 0.000000 | 0.000000 |
    | मुक्त आइटम | 0.000021 | 0.000000 | 0.000000 |
    | लॉगिंग धीमी क्वेरी | 0.000002 | 0.000000 | 0.000000 |
    | सफाई | 0.000004 | 0.000000 | 0.000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    सेट में 16 पंक्तियाँ (0.00 सेकंड)

बाद में इसे अक्षम करना न भूलें, क्योंकि लॉगिंग ओवरहेड जोड़ता है।

  
    mysql> सेट प्रोफाइलिंग = 0;
    क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.00 सेकंड)

आप सभी प्रोफाइल डेटा दिखाने के लिए QUERY X के लिए SHOW PROFILE ALL का उपयोग भी कर सकते हैं।
केदारे

8

कुछ MySQL कमांड जो हमेशा ज्ञात या याद नहीं किए जाते हैं।

आसान पढ़ने और चिपकाने के लिए वर्टिकल में सेट सेट ओरिएंटेशन बदलें।

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

उस क्वेरी को रद्द करें जिसे आप अपने इतिहास में छोड़ते समय वर्तमान में टाइप कर रहे हैं।

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

अपने पसंदीदा $ EDITOR के साथ एक क्वेरी या अंतिम क्वेरी (क्रमशः) संपादित करें।

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

कंसोल का आउटपुट साफ़ करें।

mysql> \! clear

MD5 हैश द्वारा परिणाम सेट की तुलना करें।

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

अपना संकेत बदलें।

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

किसी दिए गए स्ट्रिंग (जैसे बैश) के लिए अपना कमांड इतिहास खोजें।
खोज शब्द लिखना प्रारंभ करें और परिणामों के माध्यम से चक्र में आर ^ दोहराएं।

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

Md5sum पर +1। मुझे md5sum -पेजर के रूप में उपयोग करने का विचार पसंद है । नहीं वास्तव में mysql विशिष्ट तू
सर्वरहोर

4

ट्रिक्स मैंने सीखा है कि कुछ के लिए उपयोग किया जा सकता है:

आपके द्वारा पहले सहेजी गई फ़ाइल को चलाने के लिए:

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

उपयोग "\!" शेल कमांड एक्सेस करने के लिए। उदाहरण के लिए:

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

इसलिए यदि आप अपना विवरण किसी फ़ाइल (संपादक विकल्प का उपयोग किए बिना) लिखना चाहते हैं, तो आप दर्ज कर सकते हैं:

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

यदि आप दर्ज करते हैं

\\T filename

उसके बाद आपके द्वारा निर्दिष्ट किए गए फिल्मनाम के लिए आपके कथन और क्वेरी परिणाम निर्देशित / मुद्रित होंगे। \\tइसे बंद करने के लिए उपयोग करें ।

\\G";" के बजाय किसी क्वेरी को समाप्त करें ; स्तंभों के बजाय एक पंक्ति प्रारूप में आउटपुट दिखाने के लिए।

एक का उपयोग कर बाहर शासन मत करो ... SHOW स्टेटमेंट के साथ LIKE क्लॉज। उदाहरण के लिए:

SHOW STATUS LIKE '%cache%';

my.cnfफ़ाइल के उपयोग को देखे बिना अंतिम रूप से आपके MySQL डेटा निर्देशिका का स्थान खोजने के लिए:

SHOW VARIABLES LIKE 'datadir';

3

मुझे व्यक्तिगत रूप से SHOWकमांड पसंद है

आप कर सकते हैं
SHOW PROCESSLIST- mysql के लिए सभी चल रहे कनेक्शन
SHOW CREATE TABLE TableNameदेखने के लिए
SHOW CREATE PROCEDURE ProcedureName- तालिका बनाने के लिए उपयोग किए गए sql को देखने के लिए - SP बनाने के लिए उपयोग किए गए sql को देखने के लिए
SHOW VARIABLES - - सभी सिस्टम चर को देखने के लिए

पूरी सूची यहाँ प्राप्त करें


1
मैं थोड़ा हैरान हूँ कि आप अच्छी तरह से जानते और सूचीबद्ध कमांड जैसे SHOW और EXPLAIN को "हिडन फीचर्स" के रूप में सूचीबद्ध करते हुए हैरान हैं। एक छिपी हुई विशेषता नहीं है जो प्रलेखित नहीं है?
जॉन गार्डनियर्स

खैर, इरादा इतनी अच्छी तरह से ज्ञात उपयोगी आदेशों को बाहर लाने का नहीं है, जो किसी को अच्छी तरह से ज्ञात हो सकता है वह किसी और के लिए अज्ञात हो सकता है, क्या कहते हैं?
बिनोज एंटनी

3

वास्तव में प्रलेखित , लेकिन बहुत कष्टप्रद: गलत डेटा के लिए स्वचालित दिनांक रूपांतरण।

MySQL 5.0.2 से पहले, MySQL गैरकानूनी या अनुचित डेटा मानों को माफ कर रहा है और उन्हें डेटा प्रविष्टि के लिए कानूनी मूल्यों के लिए मजबूर करता है। MySQL 5.0.2 और ऊपर, कि डिफ़ॉल्ट व्यवहार रहता है, लेकिन आप खराब मूल्यों के अधिक पारंपरिक उपचार का चयन करने के लिए सर्वर SQL मोड को बदल सकते हैं जैसे कि सर्वर उन्हें अस्वीकार करता है और उस बयान को निरस्त करता है जिसमें वे होते हैं।

कभी-कभी आप "भाग्यशाली" होंगे जब MySQL आस-पास की वैध तिथियों के इनपुट को समायोजित नहीं करता है, लेकिन इसके बजाय इसे संग्रहीत करता है 0000-00-00जिसके द्वारा परिभाषा अमान्य है। हालाँकि, तब भी आप चाहते थे कि MySQL आपके लिए इस मूल्य को चुपचाप संग्रहीत करने के बजाय विफल हो जाए।


3

एक अन्य विशेषता जो MySQL को अन्य डेटाबेस से अलग करती है वह है REPLACE INTOकमांड। तुम कर सकते हो:

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

जैसे आप अपडेट स्टेटमेंट लिखते हैं वैसे ही आप रिप्लेस स्टेटमेंट भी लिख सकते हैं:

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

1
REPLACE INTO उपयोगी है, लेकिन यह ध्यान दिया जाना चाहिए कि यह एक महत्वपूर्ण जांच करता है, DELETEs यदि एक मिलान कुंजी मिलती है, तो अंत में INSERTs, जो INSERT की तुलना में बहुत अधिक समय लेता है ... DUPLICATE KEY UPDATE
एंडी

2

वास्तव में एक छिपी हुई विशेषता नहीं है, लेकिन यह कम ज्ञात है और मैं इसका उपयोग करने के लिए एक क्वेरी करने से बचाने के लिए बहुत उपयोग करता हूं कि क्या कुछ अद्यतन करने से पहले मौजूद है या INSERT

INSERT ... ON DUPLICATE KEY UPDATE

प्रलेखन यहाँ है


1

क्वेरी निष्पादन योजना का उपयोग देखने के लिए EXPLAIN

जैसे

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

1

वास्तव में छिपा नहीं है, लेकिन धीमी-क्वेरी-लॉग पीक समय में प्रदर्शन की समस्याओं के कारण को ट्रैक करने में वास्तव में सहायक हो सकता है।

फ़ाइल में my.cnf, [mysqld] अनुभाग - जोड़ें:

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

0

खैर, इसे एक डुप्लिकेट के रूप में चिह्नित नहीं किया जा सकता है क्योंकि यह एक अलग साइट है (और मेरे पास यहां कोई प्रतिनिधि नहीं है) लेकिन मैं इस प्रश्न के लिए इस उत्कृष्ट स्टैकओवरफ़्लो पोस्ट से लिंक करूंगा :


0

बस pQD के जवाब के अतिरिक्त (एक noobie के रूप में मैं अभी तक एक टिप्पणी जोड़ने में सक्षम नहीं हूं), अगर आपने अभी तक सही my.cnf फ़ाइल में धीमी क्वेरी लॉग का पथ नहीं जोड़ा है, तो त्रुटि लॉग होगा डेटा डायरेक्टरी को लिखा (SHOW VARIABLES LIKE 'डेटादिर का उपयोग करें; यह पता लगाने के लिए कि यह कहाँ है) और फ़ाइल नाम प्रारूप में होगा [systemname] -slow.log

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.