This is part 2 in a 3 part series. In part 1, we took a quick look at some initial configuration of InnoDB full-text search and discovered a little bit of quirky behavior; here, we are going to run some queries and compare the result sets. Our hope is that the one of two things [...]
MySQL optimizer: ANALYZE TABLE and Waiting for table flush
The MySQL optimizer makes the decision of what execution plan to use based on the information provided by the storage engines. That information is not accurate in some engines like InnoDB and they are based in statistics calculations therefore sometimes some tune is needed. In InnoDB these statistics are calculated automatically, check the following blog [...]
InnoDB Full-text Search in MySQL 5.6 (part 1)
I’ve never been a very big fan of MyISAM; I would argue that in most situations, any possible advantages to using MyISAM are far outweighed by the potential disadvantages and the strengths of InnoDB. However, up until MySQL 5.6, MyISAM was the only storage engine with support for full-text search (FTS). And I’ve encountered many [...]
CentOS 5.8 users: your UTF-8 data is in peril with Perl MySQL
CentOS 5.8 and earlier use Perl module DBD::mysql v3.0007 which has a bug that causes Perl not to flag UTF-8 data as being UTF-8. Presuming that the MySQL table/column is using UTF-8, and the Perl MySQL connection is also using UTF-8, then a correct system returns: PV = 0x9573840 "\343\203\213 \303\250"\0 [UTF8 "\x{30cb} \x{e8}"] That’s a Devel::Peek inside a Perl scalar variable which [...]
Percona Toolkit 2.1.9 is ready
About a month ago, we held a bug raffle for Percona Toolkit 2.1.9. The turnout was good and the resulting release is worth upgrading to, especially if you were affected by the backwards-incompatible changes to pt-heartbeat in 2.1.8. Here are the release notes for Percona Toolkit 2.1.9 which highlight the bugs fixed: Percona Toolkit 2.1.9 has been released. [...]
Be productive with the MySQL command line
Even if you are using a GUI tool to connect to your MySQL servers, one day or another, you will have to deal with the command line. So it is nice to know a few tips that can really make your work easier. Note: The commands below are only available for Unix/Linux. Using pager Most [...]
The Optimization That (Often) Isn’t: Index Merge Intersection
Prior to version 5.0, MySQL could only use one index per table in a given query without any exceptions; folks that didn’t understand this limitation would often have tables with lots of single-column indexes on columns which commonly appeared in their WHERE clauses, and they’d wonder why the EXPLAIN plan for a given SELECT would [...]
Quickly finding unused indexes (and estimating their size)
I had a customer recently who needed to reduce their database size on disk quickly without a lot of messy schema redesign and application recoding. They didn’t want to drop any actual data, and their index usage was fairly high, so we decided to look for unused indexes that could be removed. Collecting data It’s [...]
Concatenating MyISAM files
Recently, I found myself involved in the migration of a large read-only InnoDB database to MyISAM (eventually packed). The only issue was that for one of the table, we were talking of 5 TB of data, 23B rows. Not small… I calculated that with something like insert into MyISAM_table… select * from Innodb_table… would take [...]

