This question might have been asked many times before this post, but I could not find a suitable answer which perfectly did what I want.

Suppose I have two tables:

```
table-1: table_msg
-------------------------------------------------------
 msg_id |       msg_subject       | create_time
-------------------------------------------------------
    1   | welcome to this site    | 2015-01-01 10:20:30
-------------------------------------------------------
    2   | How to visit this site  | 2015-01-05 10:30:00
--------------------------------------------------------
    3   | Plz pay your member fee | 2015-03-10 09:00:00
--------------------------------------------------------
    4   | Important Notice        | 2015-06-01 12:20:00
--------------------------------------------------------
    5   | Plz change your password| 2015-06-15 13:24:01
--------------------------------------------------------

table-2: table_user
    -------------------------------
     user_id |    last_login
    -------------------------------
        1    | 2015-03-01 07:00:00
    -------------------------------

```

I see solutions almost all the time, that as `user_id-1`'s last login was before `msg_id-3`, so if the `user_id-1` logins on `2015-06-02`, he has 02 new messages `msg_id-3` and `msg_id-4`. Well I can bold the subject of these two messages by css to show it as `UNREAD`. Now suppose after login `user_id-1` opened `msg_id-4` and did not opened `msg_id-3`, so the `msg_id-3` is still `UNREAD`. 

Now when the same user again login on `2015-06-20`, then after his last login, `msg_id-5` can be easily identified as `UNREAD` as it was posted after his last login `2015-06-02`, it can be made bold, but what about `msg_id-3` which was posted before his last login but still not opened. It is also `UNREAD` and should be in Bold font. 

How can I identify `msg_id-3` as `UNREAD` without a separate table like below:

```
table-3: read_msg
------------------------
 id | user_id | msg_id
------------------------
  1 |    1    |    1
------------------------
  1 |    1    |    2
------------------------
  1 |    1    |    4
------------------------

```

`table-3` is well for a few users, but if users are 5000 in numbers and total messages are 10000 or higher then the table would be a quite large to handle for mysql engine and it will grow geometrically larger even day by day.

Is there any mechanism/technique or algorithm so that together with message that were posted after last login, message which were not opened before last login can also be identified as `UNREAD` without a huge size `read_msg` table?