powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оцените пожалуйста время выполнения выборки одной случайной записи
10 сообщений из 10, страница 1 из 1
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38344542
Фотография Spot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для больших таблиц.
У меня под рукой нету больших таблиц, поэтому не могу оценить
Запрос такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
      FLOOR
      (
            (select min(id) from `tbl`)
            + RAND() *
              (
               (select max(id) from `tbl`)-(select min(id) from `tbl`)+1
              )
      )
FROM `tbl`
limit 1
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38344553
javajdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Spot,

CREATE TABLE t2
AS
SELECT MD5(RAND()) X
FROM
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z1,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z2,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z3,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z4,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z5,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z6,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z7,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z8,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z9,
(SELECT 1 z UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) z0

1048576 row(s) affected

Execution Time : 00:00:21:187
Transfer Time : 00:00:00:000
Total Time : 00:00:21:187

CREATE INDEX ind_x ON t2(X);
1048576 row(s) affected

Execution Time : 00:00:45:031
Transfer Time : 00:00:00:000
Total Time : 00:00:45:031

SELECT
FLOOR
(
(SELECT MIN(X) FROM `t2`)
+ RAND() *
(
(SELECT MAX(X) FROM `t2`)-(SELECT MIN(X) FROM `t2`)+1
)
) z2
FROM t2
LIMIT 1

16 ms в первый раз, потом <1 ms
Експлаин -- все подвыборки: "optimized away"

Вин7-54, ИНтел-Е5400@2.7ГГ
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38344607
Фотография Spot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т. Е. Смело можно пользоваться такой выборкой, не боясь, что с ростом базы будет тормозить?
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38345291
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spotт. Е. Смело можно пользоваться такой выборкой, не боясь, что с ростом базы будет тормозить?

да. Этот запрос имеет нулевую "мощность" --
время его выполнения не зависит от размера.
(в какой-то момент индех может НЕ влезть в память,
и будет опять 16 мс вместь доли милисекунды)
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38345674
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcSpotт. Е. Смело можно пользоваться такой выборкой, не боясь, что с ростом базы будет тормозить?

да. Этот запрос имеет нулевую "мощность" --
время его выполнения не зависит от размера.
(в какой-то момент индех может НЕ влезть в память,
и будет опять 16 мс вместь доли милисекунды)

Зависит, это O(log N), если есть индекс по ID.
Если нет -- линейно.
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38345790
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivjavajdbcпропущено...


да. Этот запрос имеет нулевую "мощность" --
время его выполнения не зависит от размера.
(в какой-то момент индех может НЕ влезть в память,
и будет опять 16 мс вместь доли милисекунды)

Зависит, это O(log N), если есть индекс по ID.
Если нет -- линейно.

без индекса эту задачу врядли кто будет делать.

А с индексом -- задача найти первую и последнюю запись
в индексе. Неужели эта задача О(логН) ?
скорее О(конст)
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38346087
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcMasterZivпропущено...


Зависит, это O(log N), если есть индекс по ID.
Если нет -- линейно.

без индекса эту задачу врядли кто будет делать.

А с индексом -- задача найти первую и последнюю запись
в индексе. Неужели эта задача О(логН) ?
скорее О(конст)

Нет, O(log N).
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38346204
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, это последняя. Первая всё же О(конст)
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38346943
Фотография Spot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!
...
Рейтинг: 0 / 0
Оцените пожалуйста время выполнения выборки одной случайной записи
    #38347023
=)8)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Spotдля больших таблиц.
У меня под рукой нету больших таблиц, поэтому не могу оценить
Запрос такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
      FLOOR
      (
            (select min(id) from `tbl`)
            + RAND() *
              (
               (select max(id) from `tbl`)-(select min(id) from `tbl`)+1
              )
      )
FROM `tbl`
limit 1

А почему бы не использовать более оптимальный запрос?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
      FLOOR
      (
            min(id)
            + RAND() *
              (
               max(id)-min(id)+1
              )
      )
FROM `tbl`
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оцените пожалуйста время выполнения выборки одной случайной записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]