The big problem here is that the most important factor (by far) in determining how long a query will take has nothing to do with the query itself. Rather, the biggest factor in determining the answer is the load placed on the database while the query is running, especially including load from other queries. For complex queries on active systems, this load may even change significantly over the course of the query.
What you can do is get an execution plan for your query, using the EXPLAIN
keyword. You can use this to get a relative idea, all else being equal, for how much a particular query might cost. Even here, though, MySql doesn't make it easy, in that it won't just give you a nice plan cost or execution time numbers you can use, like sql server does. You need to infer those numbers based on rows and disk reads.
Again, though, even if you generate an estimated cost and then run the query, you could get results in greatly longer or shorter time than expected because the load changes on the server after the estimate was created and as the query runs.
In this case, after 10 hours, it sounds like you might have a blocking/locking issue. If you have another active (possibly long-running or frequently recurring) query that uses this table, try killing it and there's a good chance your query will finish naturally a few minutes later.