I have some logs tables with the same structure. Each tables is related to a site and count billion of entries. The reason of this split is to perform quick and efficient query, because 99.99% of the query are related to the site.
But at this time, I would like to retrieve the min and max value of a column of these tables?
I can’t manage to write the SQL request. Should I use UNION?
I am just looking for the request concept, not the final SQL request.
You could use a UNION, yes. Something like this should do:
If you have an index over the column you want to find a MAX inside, you should have very good performance as the query should seek to the end of the index on that column to find the maximum value very rapidly. Without an index on that column, the query has to scan the whole table to find the maximum value since nothing inherently orders it.
Added some details to address a concern about “enormous queries”.
I’m not sure what you mean by “enormous”. You could create a VIEW that does the UNIONs for you; then, you use the view and it will make the query very small:
but that just optimizes for the size of your query’s text. Why do you believe it is important to optimize for that? The VIEW can be helpful for maintenance — if you add or remove a partition, just fix the view appropriately. But a long query text shouldn’t really be a problem.
Or by “enormous”, are you worried about the amount of I/O the query will do? Nothing can help that much, aside from making sure each table has an index on
YourColumnso that maximum value on each partition can be found very quickly.