Starting Search From a Specific Index
As for "all the recorded are stored chronologically", the only control you have over this is the PRIMARY KEY in InnoDB.

A simple rearrangement will provide the optimal access:

PRIMARY KEY(S_Date, id),  -- to order the data in the order desired
INDEX(id)   -- to keep AUTO_INCREMENT happy


(TOP 1 is not a MySQL construct; see LIMIT.  But it is not needed with the above change.)

(The technique above is even better than INDEX(S_date).)

Explanation

In MySQL, the data rows are ordered by the PRIMARY KEY.  Said another way: The PRIMARY KEY is "clustered" with the data.  This implies that you you fetch the rows in PK order, you will be fetching the data in the most optimal order.

With the change I proposed, the data will be ordered by S_Date (with dups ordered by id).  This is exactly the order you want.

To change the current table definition, do

ALTER TABLE SalesInvoice
    DROP PRIMARY KEY,
    ADD PRIMARY KEY(S_date, id),
    ADD index(id);


The auto_increment column must occur first in some index.  This allows the 'next' value can be efficiently found after a restart.

Stop after


  start the searching of rows from Nth position.


This performs such, but not efficiently:

ORDER BY ...
LIMIT 1000 OFFSET 20000


will skip (that is, read and discard) 20K rows, then deliver 1000.

It is more efficient to "remember where you left off".  With PRIMARY KEY(id), it is straight-forward and efficient:

WHERE id &gt; $leftoff
ORDER BY id


With a composite index it gets messier, but still possible.  More discussion: http://mysql.rjweb.org/doc.php/pagination