简体   繁体   中英

Optimizing a query : joining a table on itself

i want to get last two row of a table in one query as new data and previous data

i got

 select tbl.x , tbl2.x as last_x 
 from tbl left join tbl tbl2 ON tbl.id!= tbl2.id
 order by tbl.id desc , tbl2.id desc limit 1

it works fine but i think it might get slow in a big DB

is there any way to make this faster ?

A LIMIT should work in a basic subquery, and so the following will possibly be more efficient

SELECT Sub1.x , Sub2.x as last_x 
FROM (SELECT x FROM tbl ORDER BY tbl.id DESC LIMIT 1) Sub1
CROSS JOIN (SELECT x FROM tbl ORDER BY tbl.id DESC LIMIT 2, 1) Sub2

You can take a look at the execution plan and try to optimize your query, but usually you do this when you face a problem so you can determine which parts are taking long.

Chick this thread to: How to optimise MySQL queries based on EXPLAIN plan

But as saied i would not try to solve a problm which still does not exist, i do not actually see a problem aith your query.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM