How do I see high-precision query times in mysql command line?

I’m working through some optimization work, and I’ve noticed that in some mysql dumps people post in articles and questions (which I cannot find again now that I’m actually looking), there are high-precision execution times (0.05985215 sec instead of 0.06 sec).

How can I see these more precise times for my queries on the command line?


Example of this is:

| COUNT(*) |
| 11596    |
1 row in set (0.05894344 sec)

Using profiling gets me part of the way there, but produces an output too long, and I have to remember to enable it. I am just looking for a simple high-precision duration.

SET profiling = 1;

Gives me something like this:

| Status               | Duration  |
| (initialization)     | 0.000005  |
| checking permissions | 0.00001   |
| Opening tables       | 0.000499  |
| Table lock           | 0.000071  |
| preparing            | 0.000018  |
| Creating tmp table   | 0.00002   |
| executing            | 0.000006  |
| Copying to tmp table | 6.565327  |
| Sorting result       | 0.000431  |
| Sending data         | 0.006204  |
| query end            | 0.000007  |
| freeing items        | 0.000028  |
| closing tables       | 0.000015  |
| logging slow query   | 0.000005  |
14 rows in set (0.00 sec)


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

It seems that the best answer to this is to enable profiling. There have been no other leads that pan out.

Best answer, use query profiling.

SET profiling = 1;

Method 2

this question is best answered by looking at the source of the mysql command line client. the relevant piece of code,

static void nice_time(double sec,char *buff,bool part_second)
  // ...
  if (part_second)
    sprintf(buff,"%.2f sec",sec);
    sprintf(buff,"%d sec",(int) sec);

has the number of digits after the decimal point for the sec value hard-coded into (2). this would make me conclude that higher precision times are not possible with a stock mysql install.

of course, you could patch this code, make it configurable, etc, and install from source. i guess this is what the people in the articles and questions you mentioned are doing. your best chance to find out is to just ask them (see my comment to your question).

Method 3

Without seeing the dumps you’re talking about, it’s probably a user defined function? See this thread ( ) for a couple of gotchas and how to do it.

Method 4

Not elegant, but working solution is to patch /usr/bin/mysql:

# copy the original mysql binary to your home dir
cp /usr/bin/mysql ~/mysql
# patch it
sed -i -e 's/%.2f sec/%.8f sec/1' ~/mysql 
# run it from the home directory

It works because CURRENTLY there is only one format string ‘%.2f sec’ in the mysql binary, BUT it may change over time.
You may revert to the original binary by applying reverse patch:

sed -i -e 's/%.8f sec/%.2f sec/1' ~/mysql

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x