कौन सा तेज़ है, InnoDB या MyISAM?


54

यदि MyoAM InnoDB की तुलना में "तेज" कैसे हो सकता है

  • MyISAM को डेटा के लिए डिस्क रीड करने की आवश्यकता है?
  • InnoDB इंडेक्स और डेटा के लिए बफर पूल का उपयोग करता है, और MyISAM सिर्फ इंडेक्स के लिए?

MyISAM OS कैश डेटा ब्लॉक करता है, इसलिए यह हमेशा "डेटा के लिए डिस्क रीड नहीं करता है "।
रिक जेम्स

जवाबों:


68

एकमात्र तरीका MyISAM तेज हो सकता है कि InnoDB इस अनूठी परिस्थिति में होगा

MyISAM

जब पढ़ा जाता है, तो एक MyISAM तालिका के अनुक्रमित को .MYI फ़ाइल से एक बार पढ़ा जा सकता है और इसे MyISAM कुंजी कैश में लोड किया जाता है (जैसा कि key_buffer_size द्वारा आकार )। आप एक MyISAM तालिका कैसे बना सकते हैं। तेजी से पढ़ने के लिए। इसके साथ:

ALTER TABLE mytable ROW_FORMAT=Fixed;

मैंने अपनी पिछली पोस्टों में इस बारे में लिखा था

InnoDB

ठीक है, InnoDB के बारे में क्या? क्या InnoDB प्रश्नों के लिए कोई डिस्क I / O करता है? हैरानी की बात है, हाँ यह करता है !! आप शायद सोच रहे हैं कि मैं यह कहने के लिए पागल हूं, लेकिन यह बिल्कुल सही है, यहां तक ​​कि SELECT क्वेरीज के लिए भी । इस बिंदु पर, आप शायद सोच रहे हैं "कैसे दुनिया में InnoDB डिस्क I / O प्रश्नों के लिए कर रहा है?"

यह सब एक InnoDB ACID -complaint Transactional स्टोरेज इंजन होने के कारण वापस चला जाता है । आदेश InnoDB की लेन-देन होने के लिए में, यह समर्थन किया है Iमें ACIDहै, जो अलगाव है। लेनदेन के लिए अलग-थलग बनाए रखने की तकनीक MVCC, मल्टीवर्सन कंसीलर कंट्रोल के माध्यम से की जाती है । सरल शब्दों में, InnoDB रिकॉर्ड करता है कि लेनदेन को बदलने से पहले डेटा कैसा दिखता है। कहाँ दर्ज किया जाता है? सिस्टम टेबलस्पेस फाइल में, जिसे ibdata1 के रूप में जाना जाता है। इसके लिए डिस्क I / O की आवश्यकता होती है

तुलना

चूंकि दोनों InnoDB और MyISAM डिस्क I / O करते हैं, इसलिए कौन से यादृच्छिक कारक तेज होते हैं?

  • स्तंभों का आकार
  • कॉलम प्रारूप
  • चरित्र सेट
  • न्यूमेरिकल वैल्यूज़ की रेंज (बड़े पर्याप्त INT की आवश्यकता होती है)
  • विभाजन ब्लॉक (पंक्ति जंजीर) विभाजित होने के कारण
  • डेटा विखंडन के कारण DELETEsऔरUPDATEs
  • प्राथमिक कुंजी के आकार (InnoDB में एक क्लस्टर इंडेक्स है, जिसमें दो मुख्य लुक की आवश्यकता होती है)
  • सूचकांक प्रविष्टियों का आकार
  • सूची चलती जाती है...

इस प्रकार, एक भारी-भरकम वातावरण में, यह संभव है कि माईसम टेबल के लिए एक फिक्स्ड रो फॉर्मेट से आउटपरफॉर्म इनओबीडी इनोबीडी बफ़र पूल से बाहर निकले, अगर वहाँ पर्याप्त डेटा में लिखा जा रहा है, जो ट्रांजैक्शनल बिहेवियर को सपोर्ट करने के लिए आईबीडीटा 1 के भीतर मौजूद पूर्व लॉग्स में लिखा गया है। InnoDB डेटा पर लगाया गया।

निष्कर्ष

अपने डेटा प्रकार, क्वेरीज़ और स्टोरेज इंजन को वास्तविक रूप से ध्यान से देखें। एक बार डेटा बढ़ने पर, डेटा को इधर-उधर ले जाना बहुत मुश्किल हो सकता है। बस फेसबुक से पूछो ...


1
बहुत बढ़िया जवाब, रोलैंडो। मुझे माइकल स्टोनब्रेकर द्वारा किए गए अविश्वसनीय दावों को शामिल करने पर सवाल उठाना है, जो केवल अपने उत्पाद को बेचने की कोशिश कर रहे हैं और फेसबुक के बारे में कुछ भी नहीं जानते हैं। MySQL के बारे में कई बार फेसबुक पर सुनने के बाद, यह स्पष्ट है कि वे अपनी पसंद के साथ सहज हैं।
एरोन ब्राउन

@AaronBrown मैंने पिछले साल पेरकोना लाइव एनवाईसी में हैरिसन फिस्क के बारे में सुना है और आप सही हैं - फेसबुक इनोबीडी के अपने विशेष उपयोग से बहुत खुश है और कैसे वे ऑनलाइन योजनाबद्ध परिवर्तन प्रणाली को चौड़ा करने के तरीकों के साथ आने वाले समय बिताते हैं। यहां तक ​​कि वह दर्शकों को बड़े डेटा को संभालने वाले फेसबुक के लिए काम करने का मौका भी देता है। मैंने यह दिखाने के लिए लेख को शामिल किया कि कुछ के बारे में डर है। मैं विशाल डेटा के साथ काम करने के मौके का स्वागत करूंगा। यह मजेदार और चुनौतीपूर्ण होगा। कल्पना करें कि वहां की तकनीकें सीखनी हैं। निश्चित रूप से, मैं अपने जीवन के लिए कभी भी MyISAM को नहीं छू
पाऊंगा

मैं भी उस सम्मेलन में था (और बात करने में सक्षम होना सौभाग्य था) और हैरिसन की प्रस्तुति उत्कृष्ट थी।
एरॉन ब्राउन

20

एक साधारण दुनिया में, MyISAM तेजी से पढ़ता है, InnoDB लिखने के लिए तेज़ है।

एक बार जब आप मिश्रित पढ़ना / लिखना शुरू करते हैं, तो InnoDB अपने रो लॉकिंग मैकेनिज्म की बदौलत तेजी से पढ़ेगा।

मैंने कुछ साल पहले MySQL स्टोरेज इंजन की तुलना लिखी थी, जो कि आज भी सत्य है, MyISAM और InnoDB के बीच के अनूठे अंतर को रेखांकित करता है।

मेरे अनुभव में, आपको रीड-हैवी कैश-टेबलों को छोड़कर हर चीज के लिए इनोबीडी का उपयोग करना चाहिए, जहां भ्रष्टाचार के कारण डेटा खोना उतना महत्वपूर्ण नहीं है।


4
यह उत्तर 5 वर्ष पुराना है। InnoDB वस्तुतः सभी तरीकों से पकड़ा गया है; MyISAM का उपयोग करने के लिए अब बहुत तर्क नहीं है। MySQL 8.0 MyISAM को एक साथ हटाने की प्रक्रिया में है ।
रिक जेम्स

2
और लिंक अब 9 साल पुराना है।
रिक जेम्स

सुधार, जवाब 9 साल पुराना है (किसी को भी पहला वाक्य पढ़ने पर कुछ गंभीर समस्याएँ आएंगी जब उसका डेटाबेस किया जाएगा) और लिंक 11 साल पुराना है। रिक जेम्स को पकड़ो, तुम पीछे गिर रहे हो :)।
13

1
आप सही हैं @CYREX :-) इसका कमाल इस पोस्ट को अभी भी 11 साल बाद हो रहा है। मेरे जीवन में बहुत बदलाव आया है और जिस तरह से InnoDB को अनुकूलित किया गया है। आजकल, शायद ही कभी
माइक पीटर्स

मुझे आज कुछ मरने वाले डेटाबेस को देखना था और दोनों इंजन अभी भी mysql के पुराने संस्करण के साथ उपयोग में हैं। टेबल्स InnoDB और MyISAM दोनों हैं और मेरी जिज्ञासा मुझे इस पद पर ले आई जो बहुत मददगार थी।
फारुख सुभानी

14

दो इंजनों के बीच यांत्रिक अंतरों को कवर करते हुए प्रतिक्रियाओं को जोड़ने के लिए, मैं एक अनुभवजन्य गति तुलना अध्ययन प्रस्तुत करता हूं।

शुद्ध गति के संदर्भ में, यह हमेशा ऐसा नहीं होता है कि MyISAM InnoDB से अधिक तेज़ है, लेकिन मेरे अनुभव में यह लगभग 2.0-2.5 गुना के कारक द्वारा PURE READ काम करने के वातावरण के लिए तेज़ हो जाता है। स्पष्ट रूप से यह सभी वातावरणों के लिए उपयुक्त नहीं है - जैसा कि अन्य ने लिखा है, MyISAM में लेनदेन और विदेशी कुंजी जैसी चीजों का अभाव है।

मैंने नीचे बेंचमार्किंग का थोड़ा सा काम किया है - मैंने लूपिंग के लिए अजगर और टाइमिंग की तुलना के लिए टाइमिट लाइब्रेरी का उपयोग किया है। रुचि के लिए मैंने मेमोरी इंजन को भी शामिल किया है, यह बोर्ड भर में सबसे अच्छा प्रदर्शन देता है, हालांकि यह केवल छोटी तालिकाओं के लिए उपयुक्त है ( The table 'tbl' is fullजब आप MySQL मेमोरी की सीमा से अधिक हो जाते हैं तो आप लगातार मुठभेड़ करते हैं)। मेरे द्वारा देखे जाने वाले चार प्रकार हैं:

  1. वेनिला का चयन करता है
  2. मायने रखता है
  3. सशर्त चयन
  4. अनुक्रमित और गैर-अनुक्रमित उप-चयन

सबसे पहले, मैंने निम्न एसक्यूएल का उपयोग करके तीन तालिकाओं का निर्माण किया

CREATE TABLE
    data_interrogation.test_table_myisam
    (
        index_col BIGINT NOT NULL AUTO_INCREMENT,
        value1 DOUBLE,
        value2 DOUBLE,
        value3 DOUBLE,
        value4 DOUBLE,
        PRIMARY KEY (index_col)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8

'MyISAM' के साथ दूसरे और तीसरे टेबल में 'InnoDB' और 'मेमोरी' के लिए प्रतिस्थापित किया गया।

 

1) वेनिला का चयन करता है

प्रश्न: SELECT * FROM tbl WHERE index_col = xx

परिणाम: ड्रा

वेनिला की तुलना विभिन्न डेटाबेस इंजनों द्वारा की जाती है

इनमें से सभी की गति समान रूप से समान है, और अपेक्षा के अनुसार चयनित होने वाले कॉलम की संख्या में रैखिक है। InnoDB MyISAM की तुलना में थोड़ा तेज़ लगता है लेकिन यह वास्तव में मामूली है।

कोड:

import timeit
import MySQLdb
import MySQLdb.cursors
import random
from random import randint

db = MySQLdb.connect(host="...", user="...", passwd="...", db="...", cursorclass=MySQLdb.cursors.DictCursor)
cur = db.cursor()

lengthOfTable = 100000

# Fill up the tables with random data
for x in xrange(lengthOfTable):
    rand1 = random.random()
    rand2 = random.random()
    rand3 = random.random()
    rand4 = random.random()

    insertString = "INSERT INTO test_table_innodb (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
    insertString2 = "INSERT INTO test_table_myisam (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
    insertString3 = "INSERT INTO test_table_memory (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"

    cur.execute(insertString)
    cur.execute(insertString2)
    cur.execute(insertString3)

db.commit()

# Define a function to pull a certain number of records from these tables
def selectRandomRecords(testTable,numberOfRecords):

    for x in xrange(numberOfRecords):
        rand1 = randint(0,lengthOfTable)

        selectString = "SELECT * FROM " + testTable + " WHERE index_col = " + str(rand1)
        cur.execute(selectString)

setupString = "from __main__ import selectRandomRecords"

# Test time taken using timeit
myisam_times = []
innodb_times = []
memory_times = []

for theLength in [3,10,30,100,300,1000,3000,10000]:

    innodb_times.append( timeit.timeit('selectRandomRecords("test_table_innodb",' + str(theLength) + ')', number=100, setup=setupString) )
    myisam_times.append( timeit.timeit('selectRandomRecords("test_table_myisam",' + str(theLength) + ')', number=100, setup=setupString) )
    memory_times.append( timeit.timeit('selectRandomRecords("test_table_memory",' + str(theLength) + ')', number=100, setup=setupString) )

 

2) मायने रखता है

प्रश्न: SELECT count(*) FROM tbl

परिणाम: MyISAM जीतता है

विभिन्न डेटाबेस इंजनों द्वारा गणना की तुलना

यह एक MyISAM और InnoDB के बीच एक बड़ा अंतर प्रदर्शित करता है - MyISAM (और मेमोरी) तालिका में रिकॉर्ड की संख्या पर नज़र रखता है, इसलिए यह लेनदेन तेज़ है और O (1) है। इनोबीडीबी की गणना के लिए आवश्यक समय की मात्रा सुपर-रैखिक रूप से तालिका आकार के साथ बढ़ जाती है जिसकी मैंने जांच की थी। मुझे संदेह है कि व्यवहार में देखे जाने वाले MyISAM प्रश्नों में से कई स्पीड-अप समान प्रभावों के कारण हैं।

कोड:

myisam_times = []
innodb_times = []
memory_times = []

# Define a function to count the records
def countRecords(testTable):

    selectString = "SELECT count(*) FROM " + testTable
    cur.execute(selectString)

setupString = "from __main__ import countRecords"

# Truncate the tables and re-fill with a set amount of data
for theLength in [3,10,30,100,300,1000,3000,10000,30000,100000]:

    truncateString = "TRUNCATE test_table_innodb"
    truncateString2 = "TRUNCATE test_table_myisam"
    truncateString3 = "TRUNCATE test_table_memory"

    cur.execute(truncateString)
    cur.execute(truncateString2)
    cur.execute(truncateString3)

    for x in xrange(theLength):
        rand1 = random.random()
        rand2 = random.random()
        rand3 = random.random()
        rand4 = random.random()

        insertString = "INSERT INTO test_table_innodb (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
        insertString2 = "INSERT INTO test_table_myisam (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
        insertString3 = "INSERT INTO test_table_memory (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"

        cur.execute(insertString)
        cur.execute(insertString2)
        cur.execute(insertString3)

    db.commit()

    # Count and time the query
    innodb_times.append( timeit.timeit('countRecords("test_table_innodb")', number=100, setup=setupString) )
    myisam_times.append( timeit.timeit('countRecords("test_table_myisam")', number=100, setup=setupString) )
    memory_times.append( timeit.timeit('countRecords("test_table_memory")', number=100, setup=setupString) )

 

3) सशर्त चयन करता है

प्रश्न: SELECT * FROM tbl WHERE value1<0.5 AND value2<0.5 AND value3<0.5 AND value4<0.5

परिणाम: MyISAM जीतता है

विभिन्न डेटाबेस इंजनों द्वारा सशर्त चयनों की तुलना

यहाँ, MyISAM और मेमोरी लगभग एक ही प्रदर्शन करते हैं, और बड़ी तालिकाओं के लिए InnoDB को लगभग 50% तक हरा देते हैं। यह क्वेरी का प्रकार है जिसके लिए MyISAM का लाभ अधिकतम प्रतीत होता है।

कोड:

myisam_times = []
innodb_times = []
memory_times = []

# Define a function to perform conditional selects
def conditionalSelect(testTable):
    selectString = "SELECT * FROM " + testTable + " WHERE value1 < 0.5 AND value2 < 0.5 AND value3 < 0.5 AND value4 < 0.5"
    cur.execute(selectString)

setupString = "from __main__ import conditionalSelect"

# Truncate the tables and re-fill with a set amount of data
for theLength in [3,10,30,100,300,1000,3000,10000,30000,100000]:

    truncateString = "TRUNCATE test_table_innodb"
    truncateString2 = "TRUNCATE test_table_myisam"
    truncateString3 = "TRUNCATE test_table_memory"

    cur.execute(truncateString)
    cur.execute(truncateString2)
    cur.execute(truncateString3)

    for x in xrange(theLength):
        rand1 = random.random()
        rand2 = random.random()
        rand3 = random.random()
        rand4 = random.random()

        insertString = "INSERT INTO test_table_innodb (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
        insertString2 = "INSERT INTO test_table_myisam (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
        insertString3 = "INSERT INTO test_table_memory (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"

        cur.execute(insertString)
        cur.execute(insertString2)
        cur.execute(insertString3)

    db.commit()

    # Count and time the query
    innodb_times.append( timeit.timeit('conditionalSelect("test_table_innodb")', number=100, setup=setupString) )
    myisam_times.append( timeit.timeit('conditionalSelect("test_table_myisam")', number=100, setup=setupString) )
    memory_times.append( timeit.timeit('conditionalSelect("test_table_memory")', number=100, setup=setupString) )

 

4) उप-चयन

परिणाम: InnoDB जीतता है

इस प्रश्न के लिए, मैंने उप-चयन के लिए तालिकाओं का एक अतिरिक्त सेट बनाया। प्रत्येक BIGINTs के केवल दो कॉलम हैं, एक प्राथमिक कुंजी सूचकांक और एक बिना किसी सूचकांक के। बड़े टेबल आकार के कारण, मैंने मेमोरी इंजन का परीक्षण नहीं किया। SQL तालिका निर्माण आदेश था

CREATE TABLE
    subselect_myisam
    (
        index_col bigint NOT NULL,
        non_index_col bigint,
        PRIMARY KEY (index_col)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8;

जहाँ एक बार फिर, दूसरी तालिका में 'MyISAM' को 'InnoDB' के लिए प्रतिस्थापित किया गया है।

इस क्वेरी में, मैं चयन तालिका का आकार 1000000 पर छोड़ता हूं और इसके बजाय उप-चयनित कॉलम का आकार भिन्न होता है।

विभिन्न डेटाबेस इंजनों द्वारा उप-चयनों की तुलना

यहां इनोबीडी आसानी से जीत जाता है। जब हम एक उचित आकार की मेज पर जाते हैं, तो दोनों इंजन उप-चयन के आकार के साथ रैखिक रूप से मापते हैं। सूचकांक MyISAM कमांड को गति देता है लेकिन इनोबीडी की गति पर दिलचस्प प्रभाव कम है। subSelect.png

कोड:

myisam_times = []
innodb_times = []
myisam_times_2 = []
innodb_times_2 = []

def subSelectRecordsIndexed(testTable,testSubSelect):
    selectString = "SELECT * FROM " + testTable + " WHERE index_col in ( SELECT index_col FROM " + testSubSelect + " )"
    cur.execute(selectString)

setupString = "from __main__ import subSelectRecordsIndexed"

def subSelectRecordsNotIndexed(testTable,testSubSelect):
    selectString = "SELECT * FROM " + testTable + " WHERE index_col in ( SELECT non_index_col FROM " + testSubSelect + " )"
    cur.execute(selectString)

setupString2 = "from __main__ import subSelectRecordsNotIndexed"

# Truncate the old tables, and re-fill with 1000000 records
truncateString = "TRUNCATE test_table_innodb"
truncateString2 = "TRUNCATE test_table_myisam"

cur.execute(truncateString)
cur.execute(truncateString2)

lengthOfTable = 1000000

# Fill up the tables with random data
for x in xrange(lengthOfTable):
    rand1 = random.random()
    rand2 = random.random()
    rand3 = random.random()
    rand4 = random.random()

    insertString = "INSERT INTO test_table_innodb (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"
    insertString2 = "INSERT INTO test_table_myisam (value1,value2,value3,value4) VALUES (" + str(rand1) + "," + str(rand2) + "," + str(rand3) + "," + str(rand4) + ")"

    cur.execute(insertString)
    cur.execute(insertString2)

for theLength in [3,10,30,100,300,1000,3000,10000,30000,100000]:

    truncateString = "TRUNCATE subselect_innodb"
    truncateString2 = "TRUNCATE subselect_myisam"

    cur.execute(truncateString)
    cur.execute(truncateString2)

    # For each length, empty the table and re-fill it with random data
    rand_sample = sorted(random.sample(xrange(lengthOfTable), theLength))
    rand_sample_2 = random.sample(xrange(lengthOfTable), theLength)

    for (the_value_1,the_value_2) in zip(rand_sample,rand_sample_2):
        insertString = "INSERT INTO subselect_innodb (index_col,non_index_col) VALUES (" + str(the_value_1) + "," + str(the_value_2) + ")"
        insertString2 = "INSERT INTO subselect_myisam (index_col,non_index_col) VALUES (" + str(the_value_1) + "," + str(the_value_2) + ")"

        cur.execute(insertString)
        cur.execute(insertString2)

    db.commit()

    # Finally, time the queries
    innodb_times.append( timeit.timeit('subSelectRecordsIndexed("test_table_innodb","subselect_innodb")', number=100, setup=setupString) )
    myisam_times.append( timeit.timeit('subSelectRecordsIndexed("test_table_myisam","subselect_myisam")', number=100, setup=setupString) )

    innodb_times_2.append( timeit.timeit('subSelectRecordsNotIndexed("test_table_innodb","subselect_innodb")', number=100, setup=setupString2) )
    myisam_times_2.append( timeit.timeit('subSelectRecordsNotIndexed("test_table_myisam","subselect_myisam")', number=100, setup=setupString2) )

मुझे लगता है कि इस सब के बारे में संदेश यह है कि यदि आप वास्तव में गति के बारे में चिंतित हैं, तो आपको उन प्रश्नों को मानने की आवश्यकता है जो आप कर रहे हैं बजाय इसके कि कोई इंजन अधिक उपयुक्त होगा।


1
मुझे आपका जवाब पसंद है क्योंकि यह आपके पक्ष में है कि आप किसे भी बेंचमार्क और तय करें। अलग-अलग स्टोरेज इंजन से कोई भी दो सिस्टम समान तरीके से लाभान्वित नहीं होते हैं और स्टोरेज इंजन चुनने के लिए परिश्रम की आवश्यकता होती है। आप के लिए +1 और DBA StackExchange में आपका स्वागत है !!!
रोलैंडमाइसीडीडीबीए

1
इसके अलावा, अन्य उत्तरों के साथ मेरी पोस्ट dba.stackexchange.com/questions/1/… देखें । आपकी पोस्ट तरह ऊपर और परे जाती है।
रोलैंडमाइसीडीडीबीए

SELECT * FROM tbl WHERE index_col = xx- यहाँ दो कारक हैं जो ग्राफ़ में अधिक भिन्नता पैदा करने की संभावना रखते हैं: प्राथमिक कुंजी बनाम माध्यमिक कुंजी; इंडेक्स कैश्ड बनाम नहीं है।
रिक जेम्स

2
SELECT COUNT(*)MyISAM के लिए एक स्पष्ट विजेता है जब तक आप एक WHEREखंड नहीं जोड़ते हैं ।
रिक जेम्स

मुझे लगता है कि मेरी बात यह है कि प्रत्येक क्वेरी को अलग से बेंचमार्क किया जाना चाहिए। मैंने उत्तर में कोड को शामिल किया है - यदि आप एक अलग क्वेरी का परीक्षण करना चाहते हैं, तो कृपया मेरे अतिथि बनें - या स्पष्ट रूप से बताएं कि आप क्या प्रश्न चाहते हैं और मैं इसे चाहता हूं।
स्टैकग

4

कौन सा तेज है? या तो तेज हो सकता है। YMMV।

जो आपको उपयोग करना चाहिए? InnoDB - दुर्घटना-सुरक्षित, आदि, आदि।


कृपया, "आदि, आदि को परिभाषित करें"
डेलासाविया

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