Сейчас есть 2 таблицы, которых в дальнейшем будет 13. Каждая таблица абсолютно идентична по структуре, каждая проиндексирована по нужным параметрам выборки, в общей сумме в таблицах будет записей больше 100 млн. Сейчас 10 млн.
Из них нужно доставать одинаковую информацию максимально быстро, как это можно реализовать?
$res = $DB->query("SELECT SQL_NO_CACHE `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `400` WHERE `p1` = 'nickname'
UNION ALL (SELECT `id`, `currency`, `pp2` AS `profit`, `psd2` AS `isSD`, `handLimit` FROM `400` WHERE `p2` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp3` AS `profit`, `psd3` AS `isSD`, `handLimit` FROM `400` WHERE `p3` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp4` AS `profit`, `psd4` AS `isSD`, `handLimit` FROM `400` WHERE `p4` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp5` AS `profit`, `psd5` AS `isSD`, `handLimit` FROM `400` WHERE `p5` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp6` AS `profit`, `psd6` AS `isSD`, `handLimit` FROM `400` WHERE `p6` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp7` AS `profit`, `psd7` AS `isSD`, `handLimit` FROM `400` WHERE `p7` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp8` AS `profit`, `psd8` AS `isSD`, `handLimit` FROM `400` WHERE `p8` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp9` AS `profit`, `psd9` AS `isSD`, `handLimit` FROM `400` WHERE `p9` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp1` AS `profit`, `psd1` AS `isSD`, `handLimit` FROM `200` WHERE `p1` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp2` AS `profit`, `psd2` AS `isSD`, `handLimit` FROM `200` WHERE `p2` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp3` AS `profit`, `psd3` AS `isSD`, `handLimit` FROM `200` WHERE `p3` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp4` AS `profit`, `psd4` AS `isSD`, `handLimit` FROM `200` WHERE `p4` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp5` AS `profit`, `psd5` AS `isSD`, `handLimit` FROM `200` WHERE `p5` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp6` AS `profit`, `psd6` AS `isSD`, `handLimit` FROM `200` WHERE `p6` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp7` AS `profit`, `psd7` AS `isSD`, `handLimit` FROM `200` WHERE `p7` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp8` AS `profit`, `psd8` AS `isSD`, `handLimit` FROM `200` WHERE `p8` = 'nickname')
UNION ALL (SELECT `id`, `currency`, `pp9` AS `profit`, `psd9` AS `isSD`, `handLimit` FROM `200` WHERE `p9` = 'nickname')");
200 и 400 - названия таблиц. Будут еще таблицы 100, 50, и т.д. по уменьшению. Смысл в том, что чем меньше таблица по имени, тем больше в ней информации. Но выборка будет производиться по фильтрам пользователей. Т.е. может быть такое, что пользователь вообще не будет выбирать таблицы 100, 50, 30 , а будет выбирать только 200,400 и выше.
Если разделить этот запрос на 2 селекта (по 1 к разной таблице) то работает это на 10% быстрее. Боюсь представить, что будет, когда в этом одном запросе будет 10 таблиц, будет овермиллион юнионов..
EXPLAIN сейчас выглядит так:
+------+--------------+-----------------------------------------------------+------+---------------+------+---------+-------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------+-----------------------------------------------------+------+---------------+------+---------+-------+-------+-------------+
| 1 | PRIMARY | 400 | ref | p1 | p1 | 62 | const | 715 | Using where |
| 2 | UNION | 400 | ref | p2 | p2 | 62 | const | 723 | Using where |
| 3 | UNION | 400 | ref | p3 | p3 | 62 | const | 888 | Using where |
| 4 | UNION | 400 | ref | p4 | p4 | 62 | const | 853 | Using where |
| 5 | UNION | 400 | ref | p5 | p5 | 62 | const | 604 | Using where |
| 6 | UNION | 400 | ref | p6 | p6 | 62 | const | 294 | Using where |
| 7 | UNION | 400 | ref | p7 | p7 | 62 | const | 1038 | Using where |
| 8 | UNION | 400 | ref | p8 | p8 | 62 | const | 740 | Using where |
| 9 | UNION | 400 | ref | p9 | p9 | 62 | const | 337 | Using where |
| 10 | UNION | 200 | ref | p1 | p1 | 62 | const | 10470 | Using where |
| 11 | UNION | 200 | ref | p2 | p2 | 62 | const | 7234 | Using where |
| 12 | UNION | 200 | ref | p3 | p3 | 62 | const | 13723 | Using where |
| 13 | UNION | 200 | ref | p4 | p4 | 62 | const | 8973 | Using where |
| 14 | UNION | 200 | ref | p5 | p5 | 62 | const | 8454 | Using where |
| 15 | UNION | 200 | ref | p6 | p6 | 62 | const | 9412 | Using where |
| 16 | UNION | 200 | ref | p7 | p7 | 62 | const | 18221 | Using where |
| 17 | UNION | 200 | ref | p8 | p8 | 62 | const | 13322 | Using where |
| 18 | UNION | 200 | ref | p9 | p9 | 62 | const | 2475 | Using where |
| NULL | UNION RESULT | <union1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18> | ALL | NULL | NULL | NULL | NULL | NULL | |
+------+--------------+-----------------------------------------------------+------+---------------+------+---------+-------+-------+-------------+
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем привет, начал проект на yii 2, теперь хочу его разместить на поддомене, только не получается никак правильно настроитьhtaccess Сейчас нормально...
Хочу использовать 2FA от google, подключил эту библиотеку, написал следующий код: