This is quite a misleading status. It should be called "reading and filtering data".
This means that MySQL has some data stored on the disk (or in memory) which is yet to be read and sent over. It may be the table itself, an index, a temporary table, a sorted output etc.
If you have a 1M records table (without an index) of which you need only one record, MySQL will still output the status as "sending data" while scanning the table, despite the fact it has not sent anything yet.
MySQL 8.0.17 and later: This state is no longer indicated separately, but rather is included in the Executing state.
Sending dataas a step that takes time after you runSHOW PROFILEthen the time consumed actually belongs to the step before.Sending datashows as taking up time is because it's a MySQL profiling bug, the time shown there belongs to the step before, which should beExecuting queryor something similar. It just means your query takes time to execute.Sending datastep is usually fast, unless you stream hundreds of megabytes of data.