Introducing MySQL Duplicate Key Checker

I’ve just released MySQL Duplicate Key Checker on SourceForge. This is a complete rewrite of a tool I initially released under a slightly different name. It is now much more powerful and friendlier to use, especially for scripting, and has many more options.

As with the MySQL Table Checksum tool, it is part of MySQL Toolkit.

What’s new

I’ve redesigned the program from the ground up to be more UNIX-friendly. In particular, the output is suitable for piping to awk or other tools.

The tool does a lot more for you by default. For example, it analyzes all tables in all databases. You can limit and exclude databases and tables, of course.

There are many more options. This tool is now much more general-purpose. Instead of merely finding duplicated or redundant indexes and foreign keys, the approach I took in this rewrite is to find and print information on all indexes and foreign keys – but filter out all but duplicates by default.

This means you can use the tool for other things. For example, you can get a list of all indexes. You could pipe a list of all foreign keys into another program, which describes or analyzes relationships and dependencies among your tables, perhaps to generate schema diagrams. If you want to write a tool for that purpose, please consider adding it to the toolkit. If I don’t beat you to it, that is! It’s on the list.

Sample Output

The output is much more compact now. Here’s a sample:

mysql-duplicate-key-checker -d gamer -t semaphore
gamer    semaphore InnoDB PRIMARY          KEY  BTREE    NULL          `i`
gamer    semaphore InnoDB i                KEY  BTREE    NULL          `i`
gamer    semaphore InnoDB semaphore_ibfk_1 FK   NULL     `gamer`.`foo` `i`
gamer    semaphore InnoDB semaphore_ibfk_2 FK   NULL     `gamer`.`foo` `i`

You only see output if you have duplicated indexes or foreign keys (unless you disable the filtering, in which case you’ll see everything). I deliberately added some duplicate keys to that table.

Redundant indexes aren’t just exact duplicates, as I discussed in the original articles. A redundant index could just be a leftmost prefix of another index. And for foreign keys, keying the same columns to the same referenced table, in any order, suffices.


Yet another tool! Yay!

See Also

I'm Baron Schwartz, the founder and CEO of VividCortex. I am the author of High Performance MySQL and lots of open-source software for performance analysis, monitoring, and system administration. I contribute to various database communities such as Oracle, PostgreSQL, Redis and MongoDB. More about me.