TL;DR If you use MD5(), SHA1(), or SHA() in MySQL today, start planning the move to SHA2(). Beginning with MySQL 9.6, MD5(), SHA1(), and SHA() are no longer native built-in SQL functions in the server binary. They are available through the Legacy Hashing Component: That component should be treated as a stopgap solution. It gives […]
In this blog post, we’ll look at ways you can use MySQL 5.7 generated columns (or virtual columns) to improve query performance.
Introduction
About two years ago I published a blog post about Generated (Virtual) Columns in MySQL 5.7. Since then, it’s been one of my favorite features in the MySQL 5.7 release. The reason is simple: with the help of virtual columns, we can create fine-grained indexes that can significantly increase query performance. I’m going to show you some tricks that can potentially fix slow reporting queries with GROUP BY and ORDER BY.
The Problem
Recently I was working with a customer who was struggling with this query:
SELECT CONCAT(verb, ' - …[Read more]
In this post, we’ll look at how to improve queries using generated columns and ProxySQL instead of implementing a referenced table.
Developers and architects don’t always have the time or complete information to properly analyze and design a database. That is why we see tables with more fields than needed, or with incorrect types. The best solution is implementing a change in the database schema and/or application level. In this post, we’ll look at an example of generated columns (using a char field) instead of creating a referenced table, and how using generated columns and ProxySQL avoids changes at the application level.
For this example, I will be using the film table of the Sakila database (with some changes). The original film table had a language_id as tinyint, which refers to the language table:
…[Read more]The Theory
Generated Columns is a feature released on MySQL 5.7. They can be used during
CREATE TABLE or ALTER TABLE statements.
It is a way of storing data without actually sending it through
the INSERT or UPDATE clauses in SQL.
The database resolves what the data will be.
There are two types of Generated Columns: Virtual and Stored. They work with:
- mathematical expressions (
product_price*quantity) - built-in functions (
RIGHT(),CONCAT(),FROM_UNIXTIME(),JSON_EXTRACT()) - literals (“2”, “new”, 0)
Besides that, they can be indexed but they don’t allow …
[Read more]MySQL 5.7 comes with built-in JSON support, comprising two major features:
- A native JSON data type
- A set of built-in functions to manipulate values of the JSON type
Despite being added rather recently (in MySQL 5.7.8 to be precise
- one point release number before the 5.7.9 GA version), I feel
the JSON support so far looks rather useful. Improvements are
certainly possible, but compared to for example XML support
(added in 5.1 and 5.5), the JSON feature set added to 5.7.8 is
reasonably complete, coherent and standards-compliant.
(We can of course also phrase …
About 2 weeks ago Oracle published the MySQL 5.7.7-labs-json version which includes a very interesting feature called “Generated columns” (also know as Virtual or Computed columns). MariaDB has a similar feature as well: Virtual (Computed) Columns.
The idea is very simple: if we store a column
`FlightDate` date
in our table we may want to filter or group by year(FlightDate), month(FlightDate) or even dayofweek(FlightDate). The “brute-force” approach: use the above Date and Time MySQL functions in the query; however it will prevent MySQL from using an index (see below). Generated columns will allow you to declare a “Virtual”, non-stored column …
[Read more]