Use PDO::exec to issue one-off non-prepared statements that don’t return result sets.

Use PDO::query to issue one-off non-prepared statements that return result sets.

Both of these are useful if the statements are only executed one time and/or if they are constructed dynamically in a way that is not supported by prepared statements. Usually requires additional tooling to properly construct statements (and avoid things like SQL injection vulnerabilities). That coupled to the fact their flexibility is seldom needed means that it’s often preferred to:

Use PDOStatement::prepare and PDOStatement::execute to prepare statements and execute them, regardless of whether they return results or not. Useful if executed multiple times and/or in a hot path. Also doesn’t require additional tooling to handle statement construction. Almost always recommended whenever possible.

An important tool for debugging the extraction operations is the following command

EXPLAIN PARTITIONS;

The command output shows the partition used by MySql for execution of the specified query.

The partitioning is a very effective tool, but it may give no results, if you don’t choose the proper partitioning strategy: partitioning a sales table according to the creation date and then filtering data based on users, might be useless, independently on the partition criteria, or could even worst the situation.

Since Mysql version 5.1.6, the system supports the option to schedule the execution of some events, without need to use external software (cron, at, Task Scheduler, etc.) or to change data as required for trigger implementation.

To activate the schedule function in MySql, you have simply to execute in a client the following command:

SET GLOBAL event_scheduler = 1;

Then you can verify the correct system working, by executing the following command:

SHOW PROCESSLIST;

A task can be executed once or more times and can be defined via a SQL syntax.

CREATE EVENT DELETE_BASKET_DATA
ON SCHEDULE EVERY 1 MINUTE
DO DELETE FROM basket where created > DATE_SUB(NOW(), INTERVAL 30 MINUTE);

When a task is executed, all data older than 30 minutes will be deleted.

To show how many and which tasks have been defined on the database, you need to simply execute the command “SHOW EVENTS”.

To erase a task, you can simply execute the following command

DROP EVENT DELETE_BASKET_DATA;

By using this function, you can perform some maintenance tasks on data, without affecting other parts of your application. With such options, MySql was able to fill its gap with some of the most important relational databases currently available.