Improving query performance on mysql star catalog I have a mysql database that contains a table with roughly 645 million records. I am trying to improve the query performance. Below is the SQL for the table as well as the indexes I use.

CREATE TABLE `Catalog` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`sourceFile` CHAR(5) NOT NULL,
`starID` BIGINT(20) UNSIGNED NOT NULL,
`ra` DOUBLE NOT NULL,
`decl` DOUBLE NOT NULL,
`muRA` FLOAT NOT NULL,
`muDecl` FLOAT NOT NULL,
`magB` FLOAT NOT NULL,
`magV` FLOAT NOT NULL,
`magU` FLOAT NOT NULL,
`magG` FLOAT NOT NULL,
`magR` FLOAT NOT NULL,
`magI` FLOAT NOT NULL,
`magZ` FLOAT NOT NULL,
`magY` FLOAT NOT NULL,
`magJ` FLOAT NOT NULL,
`magH` FLOAT NOT NULL,
`magK` FLOAT NOT NULL,
`w1` FLOAT NOT NULL,
`w2` FLOAT NOT NULL,
`w3` FLOAT NOT NULL,
`w4` FLOAT NOT NULL,
`magSST` FLOAT NOT NULL,
`flag` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `UFilterIndex` (`magU`, `decl`, `ra`),
INDEX `GFilterIndex` (`magG`, `decl`, `ra`),
INDEX `RFilterIndex` (`magR`, `decl`, `ra`),
INDEX `IFilterIndex` (`magI`, `decl`, `ra`),
INDEX `ZFilterIndex` (`magZ`, `decl`, `ra`),
INDEX `YFilterIndex` (`magY`, `decl`, `ra`)) ENGINE=MyISAM;


My typical query looks something similar to this:

SELECT * FROM `Catalog` 
WHERE 
`magG` &gt;= 7.32 AND `magG` &lt;= 15.68 AND 
`decl` &lt;= -1 AND `decl` &gt;= -2 AND 
`ra` &gt;= 75 AND `ra` &lt;= 75.23


It takes on average 17 seconds to execute this query. When I EXPLAIN the query I can see that it is using the GFilterIndex using index condition. The types of queries I perform will always involve magG and decl. The queries will also involve ra the vast majority of the time. So I think my index is doing what I want it to do. When I attempt to query without the index I get query times of 8min+. 

This database won't change (no inserts or updates). I will be performing thousands of these queries and at ~17 seconds each it will be very painful. Is there something I can do to further improve the query performance? Thank you for any help you can offer.
Instead of SELECT *, try selecting the fields you need (unless you need all of them!): SELECT id, magG, ... FROM
Try to have the fields you are selecting in the used index. This way you will have a covering index, so the data will be read once only from the index
If you need many fields to be returned, you may first select the IDs using the query you already have, then send another query like this: SELECT * FROM Catalog WHERE id IN (list of IDs from first query) [In total, this may not be much faster, but try it to see if the difference is significant]