/ / SQL избиране на X произволни редове в горната част Y след поръчване - mysql, sql

SQL избиране на X случайни редове в началото на Y след нареждане - mysql, sql

Използвайки MYSQL, искам да избера

1) 5 случайни реда сред първите 20 реда след поръчка по колона "цена"

2) 15 случайни реда сред 30-те следващи резултата (редове 21-50) след поръчка по колона "цена"

Какъв е най-добрият начин за постигане на тази производителност по отношение на SQL? Моля, обърнете внимание, че таблицата съдържа около 1 000 000 реда.

Крайната цел е да актуализирате колона (SET status = 1) за тези произволно избрани редове.

Отговори:

1 за отговор № 1

Използвайте вложени селекции - трябва да бъде доста бързо в тази ситуация

select * from
(
select .... from table
order by price
limit X, Y
)
order by random

Заменете X и Y с подходящите стойности

Имайте предвид, че в зависимост от конкретната RDBMS клаузите "поръчка по случайност" и "лимит" могат да се различават! това е начинът на MySQL.

Най-важното нещо е сървърътнаправете вътрешния избор първо, който ще върне само 20-30 реда (в зависимост от ограничителната клауза) и можете да го подредите в случаен ред във външния избор. Ако индекса на цената е индексиран, това ще бъде достатъчно бързо


1 за отговор № 2
  ( SELECT dt.*
FROM
( SELECT t.*                    -- columns you need from the table
FROM tableX AS t              -- your table name in place of "tableX"
ORDER BY price DESC
LIMIT 20
OFFSET 0
) AS dt
ORDER BY RAND()
LIMIT 5
)
UNION ALL
(
SELECT dt.*
FROM
( SELECT t.*
FROM tableX AS t
ORDER BY price DESC
LIMIT 30
OFFSET 20
) AS dt
ORDER BY RAND()
LIMIT 15
) ;