SlideShare a Scribd company logo
1 of 4
A fast and furious guide to MySQL
database engines
By Sanders "Kaufman, Jr."
April 7, 2003, 7:00am PDT

What if you were a racecar driver and could swap engines with the flip of a switch instead of
having to make a trip to the garage? The MySQL database does something like this for
developers; it gives you a choice of database engines and an easy way to switch them.

The MySQL stock engine is certainly adequate, but there are circumstances where the other
available engines may be better suited to the task at hand. If you want, you can even bore out
the cylinders and slap on a four-barrel carburetor by building your own database engine using
the MySQL++ API. Let's look at how you choose the engine and how to change between
engines that are available to you.

Choose your engine
The number of database engines available to you depends on how your installation of MySQL
was compiled. To add a new engine, MySQL must be recompiled. The concept of compiling
an application just to add a feature may seem odd to Windows developers, but in the UNIX
world, it's the norm. By default, MySQL supports three database engines: ISAM, MyISAM,
and HEAP. Two other types, InnoDB and Berkley (BDB), are often available as well.

ISAM
ISAM is a well-defined, time-tested method of managing data tables, designed with the idea
that a database will be queried far more often than it will be updated. As a result, ISAM
performs very fast read operations and is very easy on memory and storage resources. The
two main downsides of ISAM are that it doesn't support transactions and isn't fault-tolerant: If
your hard drive crashes, the data files will not be recoverable. If you're using ISAM in a
mission-critical application, you’ll want to have a provision for constantly backing up all your
live data, something MySQL supports through its capable replication features.

MyISAM
MyISAM is MySQL's extended ISAM format and default database engine. In addition to
providing a number of indexing and field management functions not available in ISAM,
MyISAM uses a table-locking mechanism to optimize multiple simultaneous reads and writes.
The trade-off is that you need to run the OPTIMIZE TABLE command from time to time to
recover space wasted by the update algorithms. MyISAM also has a few useful extensions
such as the MyISAMChk utility to repair database files and the MyISAMPack utility for
recovering wasted space.

MyISAM, with its emphasis on speedy read operations, is probably the major reason MySQL
is so popular for Web development, where the vast majority of the data operations you’ll be
carrying out are read operations. As a result, most hosting and Internet Presence Provider
(IPP) companies will allow the use of only the MyISAM format.

HEAP
HEAP allows for temporary tables that reside only in memory. Residing in memory makes
HEAP faster than ISAM or MyISAM, but the data it manages is volatile and will be lost if it's
not saved prior to shutdown. HEAP also doesn’t waste as much space when rows are deleted.
HEAP tables are very useful in situations where you might use a nested SELECT statement to
select and manipulate data. Just remember to destroy the table after you’re done with it. Let
me repeat that: Don’t forget to destroy the table after you’re done with it.

InnoDB and Berkley DB
The InnoDB and Berkley DB (BDB) database engines are direct products of the technology
that makes MySQL so flexible, the MySQL++ API. Almost every challenge you're likely to
face when using MySQL stems directly from the fact that the ISAM and MyISAM database
engines aren't transactional and lack foreign-key support. Although much slower than the
ISAM and MyISAM engines, InnoDB and BDB include the transactional and foreign-key
support missing from the former two choices. As such, if your design requires either or both
of these features, you’re actually compelled to use one of these two choices.

If you’re feeling particularly capable, you can create your own database engine using
MySQL++. The API provides all the functions you need for working with fields, records,
tables, databases, connections, security accounts, and all of the other myriad functions that
make up a DBMS such as MySQL. Going too heavily into the API is beyond the scope of this
article, but it’s important to know that MySQL++ exists and that it’s the technology behind
MySQL’s swappable engines. Presumably, this model of plug-in database engines could even
be used to build a native XML provider for MySQL. (Any MySQL++ developers reading this
may consider that a request.)

Flipping the switch
The switch that makes all this flexibility possible is an extension MySQL provides to ANSI
SQL, the TYPE parameter. MySQL allows you to specify database engines at the table level,
so they are sometimes referred to as table formats. The following sample code shows how to
create tables that use the MyISAM, ISAM, and HEAP engines, respectively. Notice that the
code to create each table is the same, with the exception of the trailing TYPE parameter,
which specifies the database engine.

CREATE TABLE tblMyISAM (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    value_a TINYINT
) TYPE=MyISAM
CREATE TABLE tblISAM (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    value_a TINYINT
) TYPE=ISAM
CREATE TABLE tblHeap (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    value_a TINYINT
) TYPE=Heap


You can also use the ALTER TABLE command to move an existing table from one engine to
another. The following code shows the use of ALTER TABLE to move a MyISAM table to
InnoDB's engine:

ALTER TABLE tblMyISAM CHANGE TYPE=InnoDB


MySQL makes this happen with three steps. First, an exact copy of the table is created. Next,
any incoming data changes are queued, while the copy is moved to the other engine. Finally,
any queued data changes are committed to the new table, and the original one is deleted.

An ALTER TABLE shortcut
If you’re simply upgrading your tables from ISAM to MyISAM, you can use the command
mysql_convert_table_format instead of writing ALTER TABLE statements.


You can use the SHOW TABLE command (which is another MySQL extension to the ANSI
standard) to determine which engine is managing a particular table. SHOW TABLE returns a
result set with multiple columns that you can query to get all kinds of information: The name
of the database engine is in the Type field. The following sample code illustrates the use of
SHOW TABLE:

SHOW TABLE STATUS FROM tblInnoDB


A SHOW TABLE alternative
You can use SHOW CREATE TABLE [TableName] to retrieve the same information that
SHOW TABLE retrieves.


Finally, it's worth noting that if you try to use an engine that isn't compiled into MySQL and
activated, MySQL won’t complain about it. It will instead quietly give you a table in the
default format (MyISAM) instead. There are plans to have MySQL throw an error in addition
to using the default table format, but for now, you’ll want to check the table format using
SHOW TABLE if you’re not certain that a particular database engine is available.

More choices means better performance
Considering the additional complications of recompiling and tracking which engines are used
for particular tables, why would you want to use any of the nondefault database engines? The
answer is simple: to tune the database to meet your needs.

Sure, MyISAM is fast, but if your logical design requires transactions, you’re free to use one
of the transaction-enabled engines. Further, since MySQL allows you to apply database
engines on the table level, you can take the performance hit on only the tables that require
transactions and leave the nontransactional tables to be managed by the more lightweight
MyISAM engine. With MySQL, flexibility is the key.
13
Comments
Add Your Opinion

Join the conversation!
Follow via:
       RSS
       Email Alert
See All Comments

           Staff Picks
           Top Rated
           Most Recent
           My Contacts

0 Votes
+-



RE: A fast and furious guide to MySQL database engines


jwendel@... 11th Jun 2009
While your article led me to the solution, my version of MySQL required a different syntax:
alter table tableName type=InnoDB;
show table status from databaseName;
View in thread
0 Votes
+-



Great! Exactly what I was looking for.


deviloper@... Updated - 11th Mar 2009
Thanks a lot.
View in thread
0 Votes
+-



RE: A fast and furious guide to MySQL database engines


harishkous@... Updated - 13th Oct 2008

This is a good article which helps one who are facing with common MYSQL error of "Can't
create table (errno: 150)", when trying to add a foreign key constraint to existing table.Root
cause for the... Read Whole Comment +

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

A fast and furious guide to my sql database engines

  • 1. A fast and furious guide to MySQL database engines By Sanders "Kaufman, Jr." April 7, 2003, 7:00am PDT What if you were a racecar driver and could swap engines with the flip of a switch instead of having to make a trip to the garage? The MySQL database does something like this for developers; it gives you a choice of database engines and an easy way to switch them. The MySQL stock engine is certainly adequate, but there are circumstances where the other available engines may be better suited to the task at hand. If you want, you can even bore out the cylinders and slap on a four-barrel carburetor by building your own database engine using the MySQL++ API. Let's look at how you choose the engine and how to change between engines that are available to you. Choose your engine The number of database engines available to you depends on how your installation of MySQL was compiled. To add a new engine, MySQL must be recompiled. The concept of compiling an application just to add a feature may seem odd to Windows developers, but in the UNIX world, it's the norm. By default, MySQL supports three database engines: ISAM, MyISAM, and HEAP. Two other types, InnoDB and Berkley (BDB), are often available as well. ISAM ISAM is a well-defined, time-tested method of managing data tables, designed with the idea that a database will be queried far more often than it will be updated. As a result, ISAM performs very fast read operations and is very easy on memory and storage resources. The two main downsides of ISAM are that it doesn't support transactions and isn't fault-tolerant: If your hard drive crashes, the data files will not be recoverable. If you're using ISAM in a mission-critical application, you’ll want to have a provision for constantly backing up all your live data, something MySQL supports through its capable replication features. MyISAM MyISAM is MySQL's extended ISAM format and default database engine. In addition to providing a number of indexing and field management functions not available in ISAM, MyISAM uses a table-locking mechanism to optimize multiple simultaneous reads and writes. The trade-off is that you need to run the OPTIMIZE TABLE command from time to time to recover space wasted by the update algorithms. MyISAM also has a few useful extensions such as the MyISAMChk utility to repair database files and the MyISAMPack utility for recovering wasted space. MyISAM, with its emphasis on speedy read operations, is probably the major reason MySQL is so popular for Web development, where the vast majority of the data operations you’ll be carrying out are read operations. As a result, most hosting and Internet Presence Provider (IPP) companies will allow the use of only the MyISAM format. HEAP HEAP allows for temporary tables that reside only in memory. Residing in memory makes
  • 2. HEAP faster than ISAM or MyISAM, but the data it manages is volatile and will be lost if it's not saved prior to shutdown. HEAP also doesn’t waste as much space when rows are deleted. HEAP tables are very useful in situations where you might use a nested SELECT statement to select and manipulate data. Just remember to destroy the table after you’re done with it. Let me repeat that: Don’t forget to destroy the table after you’re done with it. InnoDB and Berkley DB The InnoDB and Berkley DB (BDB) database engines are direct products of the technology that makes MySQL so flexible, the MySQL++ API. Almost every challenge you're likely to face when using MySQL stems directly from the fact that the ISAM and MyISAM database engines aren't transactional and lack foreign-key support. Although much slower than the ISAM and MyISAM engines, InnoDB and BDB include the transactional and foreign-key support missing from the former two choices. As such, if your design requires either or both of these features, you’re actually compelled to use one of these two choices. If you’re feeling particularly capable, you can create your own database engine using MySQL++. The API provides all the functions you need for working with fields, records, tables, databases, connections, security accounts, and all of the other myriad functions that make up a DBMS such as MySQL. Going too heavily into the API is beyond the scope of this article, but it’s important to know that MySQL++ exists and that it’s the technology behind MySQL’s swappable engines. Presumably, this model of plug-in database engines could even be used to build a native XML provider for MySQL. (Any MySQL++ developers reading this may consider that a request.) Flipping the switch The switch that makes all this flexibility possible is an extension MySQL provides to ANSI SQL, the TYPE parameter. MySQL allows you to specify database engines at the table level, so they are sometimes referred to as table formats. The following sample code shows how to create tables that use the MyISAM, ISAM, and HEAP engines, respectively. Notice that the code to create each table is the same, with the exception of the trailing TYPE parameter, which specifies the database engine. CREATE TABLE tblMyISAM ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=MyISAM CREATE TABLE tblISAM ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=ISAM CREATE TABLE tblHeap ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), value_a TINYINT ) TYPE=Heap You can also use the ALTER TABLE command to move an existing table from one engine to
  • 3. another. The following code shows the use of ALTER TABLE to move a MyISAM table to InnoDB's engine: ALTER TABLE tblMyISAM CHANGE TYPE=InnoDB MySQL makes this happen with three steps. First, an exact copy of the table is created. Next, any incoming data changes are queued, while the copy is moved to the other engine. Finally, any queued data changes are committed to the new table, and the original one is deleted. An ALTER TABLE shortcut If you’re simply upgrading your tables from ISAM to MyISAM, you can use the command mysql_convert_table_format instead of writing ALTER TABLE statements. You can use the SHOW TABLE command (which is another MySQL extension to the ANSI standard) to determine which engine is managing a particular table. SHOW TABLE returns a result set with multiple columns that you can query to get all kinds of information: The name of the database engine is in the Type field. The following sample code illustrates the use of SHOW TABLE: SHOW TABLE STATUS FROM tblInnoDB A SHOW TABLE alternative You can use SHOW CREATE TABLE [TableName] to retrieve the same information that SHOW TABLE retrieves. Finally, it's worth noting that if you try to use an engine that isn't compiled into MySQL and activated, MySQL won’t complain about it. It will instead quietly give you a table in the default format (MyISAM) instead. There are plans to have MySQL throw an error in addition to using the default table format, but for now, you’ll want to check the table format using SHOW TABLE if you’re not certain that a particular database engine is available. More choices means better performance Considering the additional complications of recompiling and tracking which engines are used for particular tables, why would you want to use any of the nondefault database engines? The answer is simple: to tune the database to meet your needs. Sure, MyISAM is fast, but if your logical design requires transactions, you’re free to use one of the transaction-enabled engines. Further, since MySQL allows you to apply database engines on the table level, you can take the performance hit on only the tables that require transactions and leave the nontransactional tables to be managed by the more lightweight MyISAM engine. With MySQL, flexibility is the key. 13 Comments Add Your Opinion Join the conversation!
  • 4. Follow via: RSS Email Alert See All Comments Staff Picks Top Rated Most Recent My Contacts 0 Votes +- RE: A fast and furious guide to MySQL database engines jwendel@... 11th Jun 2009 While your article led me to the solution, my version of MySQL required a different syntax: alter table tableName type=InnoDB; show table status from databaseName; View in thread 0 Votes +- Great! Exactly what I was looking for. deviloper@... Updated - 11th Mar 2009 Thanks a lot. View in thread 0 Votes +- RE: A fast and furious guide to MySQL database engines harishkous@... Updated - 13th Oct 2008 This is a good article which helps one who are facing with common MYSQL error of "Can't create table (errno: 150)", when trying to add a foreign key constraint to existing table.Root cause for the... Read Whole Comment +