powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скорость выполнения запроса (Большая таблица)
30 сообщений из 30, показаны все 2 страниц
Скорость выполнения запроса (Большая таблица)
    #39708844
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Есть 1 большая таблица, в которой сейчас записей 17млн. Будет 200 млн записей через пару дней, когда мы зальем остальную информацию. В дальнейшем в день таблица будет пополняться на 700к записей.

p1-p9 - это игрок в карты, который может сидеть на разном месте в раздаче за столом.
psd и pp - просто статы, как сыграл.
handLimit - лимит раздачи.

Нужно доставать информацию настолько быстро, на сколько это возможно. В таблице есть составной индекс p*_handLimit , чаще всего выборка будет работать именно по p* + handLimit , но если попытаться выбрать все записи с игроком, то запрос уже сейчас занимает 1.25с. Т.е. в будущем запрос может длиться и 5+ секунд.
Игрок записан в mediumint 3 байта.

Сам запрос:
авторSELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '9121'
UNION ALL (SELECT `id`, `currency`, `pp2` AS `profit`, `psd2` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p2` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp3` AS `profit`, `psd3` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p3` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp4` AS `profit`, `psd4` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p4` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp5` AS `profit`, `psd5` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p5` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp6` AS `profit`, `psd6` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p6` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp7` AS `profit`, `psd7` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p7` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp8` AS `profit`, `psd8` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p8` = '9121')
UNION ALL (SELECT `id`, `currency`, `pp9` AS `profit`, `psd9` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p9` = '9121')
ORDER BY `id` ASC
Использую юнион, Потому что обычный OR OR OR ... медленнее на 30%. Движок MyISAM , важен только селект и инсерт.
Апдейтов никогда не будет, а заноситься значения будут раз в день 1 минуту по времени.
my.cnf настроен не знаю как, пару лет назад что-то там пытался, таким он и остался.
Серверная машина - 128гб оперы, 16 потоков 8 ядер.
И соответственно EXPLAIN запроса и стуктуру таблицы приложил в изображениях:

...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708848
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-,

Покажите нормальный DDL таблицы текстом. Разглядывать мелкий мутный jpeg не очень-то хочется.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708850
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще таблица просится на "разворот" в вертикаль и на отделение результатов игроков в отдельную таблицу. Тогда всех этих UNION ALL-ов будет не нужно. И индекс будет нужен один вместо девяти.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708852
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, это старая таблица. Прошу прощения. Вот новая

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE TABLE `ps_hands` (
  `id` bigint(14) NOT NULL DEFAULT '0',
  `roomId` tinyint(1) NOT NULL DEFAULT '0',
  `currency` varchar(1) NOT NULL,
  `handLimit` float(8,2) NOT NULL DEFAULT '0.00',
  `date` date NOT NULL,
  `maxPlayers` int(1) NOT NULL,
  `text` text,
  `p1` mediumint(7) NOT NULL DEFAULT '0',
  `p2` mediumint(7) NOT NULL DEFAULT '0',
  `p3` mediumint(7) NOT NULL DEFAULT '0',
  `p4` mediumint(7) NOT NULL DEFAULT '0',
  `p5` mediumint(7) NOT NULL DEFAULT '0',
  `p6` mediumint(7) NOT NULL DEFAULT '0',
  `p7` mediumint(7) NOT NULL DEFAULT '0',
  `p8` mediumint(7) NOT NULL DEFAULT '0',
  `p9` mediumint(7) NOT NULL DEFAULT '0',
  `pp1` float(8,2) NOT NULL,
  `pp2` float(8,2) NOT NULL,
  `pp3` float(8,2) NOT NULL,
  `pp4` float(8,2) NOT NULL,
  `pp5` float(8,2) NOT NULL,
  `pp6` float(8,2) NOT NULL,
  `pp7` float(8,2) NOT NULL,
  `pp8` float(8,2) NOT NULL,
  `pp9` float(8,2) NOT NULL,
  `psd1` tinyint(1) NOT NULL,
  `psd2` tinyint(1) NOT NULL,
  `psd3` tinyint(1) NOT NULL,
  `psd4` tinyint(1) NOT NULL,
  `psd5` tinyint(1) NOT NULL,
  `psd6` tinyint(1) NOT NULL,
  `psd7` tinyint(1) NOT NULL,
  `psd8` tinyint(1) NOT NULL,
  `psd9` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `maxPlayers` (`maxPlayers`),
  KEY `currency` (`currency`) USING BTREE,
  KEY `p1_handLimit` (`p1`,`handLimit`),
  KEY `p2_handLimit` (`p2`,`handLimit`),
  KEY `p3_handLimit` (`p3`,`handLimit`),
  KEY `p4_handLimit` (`p4`,`handLimit`),
  KEY `p5_handLimit` (`p5`,`handLimit`),
  KEY `p6_handLimit` (`p6`,`handLimit`),
  KEY `p7_handLimit` (`p7`,`handLimit`),
  KEY `p8_handLimit` (`p8`,`handLimit`),
  KEY `p9_handLimit` (`p9`,`handLimit`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708854
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftВообще таблица просится на "разворот" в вертикаль и на отделение результатов игроков в отдельную таблицу. Тогда всех этих UNION ALL-ов будет не нужно. И индекс будет нужен один вместо девяти.
Честно? Я не представляю как это реализовать :( Пытаюсь, но пока не получается.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708856
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-,

Помимо предыдущего замечания:
Вы уверены, что нужно использовать именно float? 4 байта как-никак...
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708859
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-miksoftВообще таблица просится на "разворот" в вертикаль и на отделение результатов игроков в отдельную таблицу. Тогда всех этих UNION ALL-ов будет не нужно. И индекс будет нужен один вместо девяти.
Честно? Я не представляю как это реализовать :( Пытаюсь, но пока не получается.одна запись в таблицу партий и 9 записей в таблицу игроков-партий.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708860
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-,

Помимо предыдущего замечания:
Вы уверены, что нужно использовать именно float? 4 байта как-никак...
Смотрите, я вчера думал о том, чтобы урезать handLimit с флоат до smaillint , итого экономлю 2 байта * строки.
Возможно так и поступлю, а умножать на 100 буду в пхп.

Но, профит как использовать не флоат? Если допустим писать в центах вместо 1.01 , понимаю, но если игрок выиграл 150000$ , это я не преувеличил, действительно в день есть больше 50 выигрышей от 80к+$. То тогда не влезет запись и все равно придется 4 байта уже отдавать(
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708867
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-Но, профит как использовать не флоат? Если допустим писать в центах вместо 1.01 , понимаю, но если игрок выиграл 150000$ , это я не преувеличил, действительно в день есть больше 50 выигрышей от 80к+$. То тогда не влезет запись и все равно придется 4 байта уже отдавать(Даже в этом случае float плохой выбор, если не хотите потом удивляться, почему у вас 0.1+0.1=0.19999..., а не 0.2.
Для денег лучше использовать либо более приспособленные типы, например, DECIMAL, либо целочисленные в нужном масштабе.
Для масштаба 0.01 ... 150000 хватит типа MEDIUMINT, правда, без запаса. INT - с запасом.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708869
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое psd1-9 и зачем их столько?
currency явно просится tinyint, да и вообще, нужно ли это поле?
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708871
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '9121'

отдельно этот фрагмент за какое время выполняется?
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708872
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-Но, профит как использовать не флоат? Если допустим писать в центах вместо 1.01 , понимаю, но если игрок выиграл 150000$ , это я не преувеличил, действительно в день есть больше 50 выигрышей от 80к+$. То тогда не влезет запись и все равно придется 4 байта уже отдавать(Даже в этом случае float плохой выбор, если не хотите потом удивляться, почему у вас 0.1+0.1=0.19999..., а не 0.2.
Для денег лучше использовать либо более приспособленные типы, например, DECIMAL, либо целочисленные в нужном масштабе.
Для масштаба 0.01 ... 150000 хватит типа MEDIUMINT, правда, без запаса. INT - с запасом.
Да судя по mysql.com, mediumint хватит в Maximum Unsigned value , а это не вредно? Я обычно по Maximum Value ориентировался. сейчас посмотрю какие максимальные выигрыши были за 17млн.
Про 0.1 + 0.1 - уже удивлялись, поэтому округляли и качали bmath для php , mysql - javascript #2 :D
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708874
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft
Код: sql
1.
SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '9121'

отдельно этот фрагмент за какое время выполняется?

SELECT SQL_NO_CACHE `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '9121' Total execution time in seconds: 0.11549305915833

Если в кеше запрос - то 0.02
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708875
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-,

И еще - план показывает оценку порядка 300 тысяч записей в результате (сумма колонки rows). Вам точно нужны все эти записи? Да еще в отсортированном виде?
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708878
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-Да судя по mysql.com, mediumint хватит в Maximum Unsigned value , а это не вредно?Не понял, что именно может быть вредно? Либо вам хватает диапазона и точности, либо нет.
Диапазоны целочисленных типов .
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708881
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-,

И еще - план показывает оценку порядка 300 тысяч записей в результате (сумма колонки rows). Вам точно нужны все эти записи? Да еще в отсортированном виде?

Да, нужно получать все данные, если пользователь указал фильтр за всё время, сортировка так же нужна для построения графика.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708882
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-Да судя по mysql.com, mediumint хватит в Maximum Unsigned value , а это не вредно?Не понял, что именно может быть вредно? Либо вам хватает диапазона и точности, либо нет.
Диапазоны целочисленных типов .

Не подходит unsigned, так как профит игрока может быть отрицательным.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708884
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-Не подходит unsigned, так как профит игрока может быть отрицательным.Тогда INT или DECIMAL. Но все равно не FLOAT.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708886
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-miksoft8POWER-,

И еще - план показывает оценку порядка 300 тысяч записей в результате (сумма колонки rows). Вам точно нужны все эти записи? Да еще в отсортированном виде?

Да, нужно получать все данные, если пользователь указал фильтр за всё время, сортировка так же нужна для построения графика.С этим надо что-то делать. Никакой пользователь не будет читать сотни тысяч записей и никакой экран не покажет график из сотен тысяч точек.
Либо отказывать пользователю в таком запросе, либо показывать предагрегированные данные, либо что-то еще.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708891
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-,

Показанный запрос - единственный тип запросов, которые будут выполняться или есть и другие?
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708894
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-пропущено...


Да, нужно получать все данные, если пользователь указал фильтр за всё время, сортировка так же нужна для построения графика.С этим надо что-то делать. Никакой пользователь не будет читать сотни тысяч записей и никакой экран не покажет график из сотен тысяч точек.
Либо отказывать пользователю в таком запросе, либо показывать предагрегированные данные, либо что-то еще.

Мы не отдаём пользователю все точки, однако нам они нужны чтобы подсчитать каждую и вывести ему график со всеми результатами.
Данные разделяются на 1 тысячу точек, а при приближении любой части графика - рендерятся новые точки.
К тому же пользователь запрашивает даже не 300тыс. записей, а может и 2млн запросить, если у оппонента наиграно столько рук и ему нужна статистика за все время.. А в 90% случаях нужна.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708896
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-,
Показанный запрос - единственный тип запросов, которые будут выполняться или есть и другие?
Только такой тип.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708904
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-Мы не отдаём пользователю все точки, однако нам они нужны чтобы подсчитать каждую и вывести ему график со всеми результатами.
Данные разделяются на 1 тысячу точек, а при приближении любой части графика - рендерятся новые точки.Вполне вероятно, что вам помогут предагрегаты. Если, конечно, возможно заранее как-то определить интервалы группировки.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708906
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-miksoft8POWER-,
Показанный запрос - единственный тип запросов, которые будут выполняться или есть и другие?
Только такой тип.Тогда я бы попробовал разделить таблицу на две, как писал выше - 21687504 .
И, возможно, перейти на InnoDB. Он может быть быстрее при выборке по первичному ключу.
Но, конечно, нужно делать тесты.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39708907
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-пропущено...

Только такой тип.Тогда я бы попробовал разделить таблицу на две, как писал выше - 21687504 .
И, возможно, перейти на InnoDB. Он может быть быстрее при выборке по первичному ключу.
Но, конечно, нужно делать тесты.
Хорошо, спасибо
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39709819
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проработав все о чем поговорили, кроме смещения таблицы с горизонтальной в вертикальную, получилось добиться результата этого же запроса вместо 0.64-0.75с вместо 1.25с.

Проглядел, что maxPlayers стоял int , убрал float на profit в mediumint , currency теперь не $ а 1 и что-то еще, уже подзабыл.
Долго возился с настройками MySQL сегодня, заметил вот такую вещь:

# Query_time: 3.964766 Lock_time: 0.000197 Rows_sent: 1051346 Rows_examined: 3154038
SET timestamp=1538129731;
SELECT SQL_NO_CACHE `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '96317'
UNION ALL (SELECT `id`, `currency`, `pp2` AS `profit`, `psd2` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p2` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp3` AS `profit`, `psd3` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p3` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp4` AS `profit`, `psd4` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p4` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp5` AS `profit`, `psd5` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p5` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp6` AS `profit`, `psd6` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p6` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp7` AS `profit`, `psd7` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p7` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp8` AS `profit`, `psd8` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p8` = '96317')
UNION ALL (SELECT `id`, `currency`, `pp9` AS `profit`, `psd9` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p9` = '96317')
ORDER BY `id` ASC;


Этот запрос на самого крутого(по количеству игр) на данный момент игрока выполняется 3.5-4.3сек.
Слоу лог: Rows_sent: 1051346 Rows_examined: 3154038
Как это возможно? У меня проиндексирован p1-p9 , он ведь должен читать всего 1051346 строк, вместо 3 миллионов?
Почему он читает еще 2 миллиона? Если через OR OR OR то вообще 5 млн и скорость запроса в 2 раза хуже.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39709825
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице сейчас 66 млн строк...
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39710164
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8POWER-Слоу лог: Rows_sent: 1051346 Rows_examined: 3154038
Как это возможно? У меня проиндексирован p1-p9 , он ведь должен читать всего 1051346 строк, вместо 3 миллионов?Судя по тому, что числа различаются ровно в 3 раза, это какой-то эффект самого MySQL. Например, либо от UNION ALL-ов, либо от сортировки, либо от обоих.
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39710177
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft8POWER-Слоу лог: Rows_sent: 1051346 Rows_examined: 3154038
Как это возможно? У меня проиндексирован p1-p9 , он ведь должен читать всего 1051346 строк, вместо 3 миллионов?Судя по тому, что числа различаются ровно в 3 раза, это какой-то эффект самого MySQL. Например, либо от UNION ALL-ов, либо от сортировки, либо от обоих.
Судя по всему реально так. Убрал юнионы:

Код: sql
1.
2.
3.
Query_time: 11.908202  Lock_time: 0.000158 Rows_sent: 1051346  Rows_examined: 2102692
SET timestamp=1538167584;
SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '96317' OR `p2` = '96317' OR `p3` = '96317' OR `p4` = '96317' OR `p5` = '96317' OR `p6` = '96317' OR `p7` = '96317' OR `p8` = '96317' OR `p9` = '96317' ORDER BY `id` ASC;


Затем убрал ордер и стало ровно в ровно строчек..:
Код: sql
1.
2.
3.
# Query_time: 6.640310  Lock_time: 0.000237 Rows_sent: 1051346  Rows_examined: 1051346
SET timestamp=1538167823;
SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '96317' OR `p2` = '96317' OR `p3` = '96317' OR `p4` = '96317' OR `p5` = '96317' OR `p6` = '96317' OR `p7` = '96317' OR `p8` = '96317' OR `p9` = '96317';


Затем все вернул обратно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
# Query_time: 6.900837  Lock_time: 0.000485 Rows_sent: 1051346  Rows_examined: 3154038
SET timestamp=1538167901;
SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p1` = '96317'
UNION ALL (SELECT `id`, `currency`, `pp2` AS `profit`, `psd2` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p2` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp3` AS `profit`, `psd3` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p3` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp4` AS `profit`, `psd4` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p4` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp5` AS `profit`, `psd5` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p5` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp6` AS `profit`, `psd6` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p6` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp7` AS `profit`, `psd7` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p7` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp8` AS `profit`, `psd8` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p8` = '96317') 
UNION ALL (SELECT `id`, `currency`, `pp9` AS `profit`, `psd9` AS `isSD`, `handLimit` FROM `ps_hands` WHERE `p9` = '96317') 
ORDER BY `id` ASC;


И результат, как из этого видно - юнионы быстрее, даже с ордером.. Эх.
Спасибо за помощь. Не знал. А вам надо идти в майкрософт работать)
...
Рейтинг: 0 / 0
Скорость выполнения запроса (Большая таблица)
    #39710179
8POWER-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попытался еще поднастроить my.cnf , с помощью mysqltuner но долго думав понял, что тут и я болван и тюнер. Т.к. он не знает, какая у меня непростая задача) а я потому, что боюсь сервер скоро сгорит от того, что я "типо" настроил.. Ха-ха.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Скорость выполнения запроса (Большая таблица)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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