In my database, I have table `wp_postmeta`, example: 

    | meta_key | meta_value |  post_id   |
    ---------------------------------
       points  |     12     |  23
       points  |     2      |  18
       lorem   |     ipsum  |  92
       points  |     8      |  15

I want to order `points` by `meta_value` and get the row number of a specific `post_id`. Basically a rank system, with highest number at the top. 

For example, ordering `points` by `meta_value`:

    | meta_key | meta_value |  post_id   |
    ---------------------------------
       points  |     12     |  23
       points  |     8      |  15
       points  |     2      |  18


`post_id` with value `15` will be **rank 2**.

What SQL query can I run to achieve this *with* optimisation in mind?

What I've tried so far
----------------------

I have achieved this via query:

    $query="
        SELECT post_id,FIND_IN_SET(
                      post_id,(SELECT GROUP_CONCAT( post_id ORDER BY meta_value * 1 DESC)
                              FROM $wpdb->postmeta
                              WHERE meta_key ='points')
                           ) AS `rank`
        FROM $wpdb->postmeta
        WHERE meta_key ='points'
        AND post_id = '".$post_id."'
        ";

    $result  = $wpdb->get_row($query);
    
    $rank = $result->rank;

Works fine. *However*, this query is very slow. 

How can I make this query faster? 

EDIT: Here is a list of indexes in this table:

[![enter image description here][1]][1]


  [1]: https://i.sstatic.net/ymd38.png