MySQL: memory requirements for django app with 1 big table (460M rows)
Looking at the query

SELECT gene1_id, AVG(correlation) AS avg FROM genescorrelation 
WHERE gene2_id IN (176829, 176519, 176230) 
GROUP BY gene1_id ORDER BY NULL 


I have four(4) suggestions

SUGGESTION #1

I see three(3) columns. I recommend making a covering index

ALTER TABLE genescorrelation
ADD INDEX gene2_gene1_correlation_idx1 (gene2_id,gene_id,correlation);


The StackOverflow accepted answer already mentioned making this index. That way, the aggregation never touches the table. All the needed data will come from the index.

Since you already made gene2_gene1_idx1 here is the fix

ALTER TABLE genescorrelation
DROP INDEX gene2_gene1_idx1,
ADD INDEX gene2_gene1_correlation_idx1 (gene2_id,gene_id,correlation);


SUGGESTION #2

You probably need more read threads

Add this to my.cnf

[mysqld]
innodb_read_io_threads = 8


Restart of mysql is required

SUGGESTION #3

If the server is just a DB Server, you should reserve up to 75% of RAM for InnoDB Buffer Pool or the sum total of all InnoDB Data and Indexes (SELECT SUM(data_length+index_length) InnoDBDataAndIndex FROM information_schema.tables WHERE engine='InnoDB';), whichever is smaller.

SUGGESTION #4 (OPTIONAL)

Change the Query to see break down by gene2_id

SELECT
    IFNULL(gene2_id,'All Gene2 IDs') gene2,
    IFNULL(gene1_id,'All Gene1 IDs') gene1,
    AVG(correlation) AS avg FROM genescorrelation 
WHERE gene2_id IN (176829, 176519, 176230) 
GROUP BY gene2_id,gene1_id WITH ROLLUP;