Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оцените пожалуйста время выполнения выборки одной случайной записи / 10 сообщений из 10, страница 1 из 1
26.07.2013, 05:03:10
    #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
26.07.2013, 05:45:31
    #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
26.07.2013, 08:36:33
    #38344607
Spot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените пожалуйста время выполнения выборки одной случайной записи
т. Е. Смело можно пользоваться такой выборкой, не боясь, что с ростом базы будет тормозить?
...
Рейтинг: 0 / 0
26.07.2013, 14:44:55
    #38345291
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените пожалуйста время выполнения выборки одной случайной записи
Spotт. Е. Смело можно пользоваться такой выборкой, не боясь, что с ростом базы будет тормозить?

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

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

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


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

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

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

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


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

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

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

Нет, O(log N).
...
Рейтинг: 0 / 0
27.07.2013, 07:15:18
    #38346204
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените пожалуйста время выполнения выборки одной случайной записи
MasterZiv, это последняя. Первая всё же О(конст)
...
Рейтинг: 0 / 0
29.07.2013, 04:29:08
    #38346943
Spot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оцените пожалуйста время выполнения выборки одной случайной записи
Спасибо всем!
...
Рейтинг: 0 / 0
29.07.2013, 09:49:58
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оцените пожалуйста время выполнения выборки одной случайной записи / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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