Итак, я попытался объединить две таблицы: одну таблицу с более чем 300 000 строк и другую с около 35 000 строк.
При попытке выполнить этот запрос просто истекает время, когда я использую "LEFT OUTER"ПРИСОЕДИНЯЙТЕСЬ », чтобы получить все данные из левой таблицы и что находится в обоих.
Я также пытался с «Объяснить», и я вижу, что, когда он запрашивает другую базу данных, он не использует ни один из индексов, которые я для него создал, скорее, он запрашивает всю таблицу
SELECT
username as e,
MAX(country) as country, #this is kinda a hacky way to avoid grouping
COALESCE(SUM(a.clicks),0) as clicks,
COALESCE((SELECT COUNT(*) FROM Finance WHERE username=e),0) + COALESCE(SUM(a.registrations),0) as reg,
COALESCE((SELECT COUNT(*) FROM Finance WHERE deposits > 0 AND username=e),0) + COALESCE(SUM(a.ftds),0) as ftds,
COALESCE((SELECT SUM(deposits) FROM Finance WHERE username=e),0) + COALESCE(SUM(a.deposits),0) as deposits,
COALESCE((SELECT SUM(netcash) FROM Finance WHERE username=e),0) + COALESCE(SUM(a.netrevenue),0) as netcash,
COALESCE(SUM(a.commission),0) as commission
fROM Finance p
LEFT OUTER JOIN xmldata.AllResults a ON SUBSTRING_INDEX(site, "-", 1) = username
GROUP BY username
LIMIT 10000
Вот это "Объяснение":
+----+--------------------+-----------------+------------+-------+-------------------------------+-------------------------------+---------+------+--------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+-----------------+------------+-------+-------------------------------+-------------------------------+---------+------+--------+----------+----------------------------------------------------+
| 1 | PRIMARY | p | NULL | index | playerdbfinance_email_country | playerdbfinance_email_country | 388 | NULL | 377031 | 100.00 | Using index; Using temporary; Using filesort |
| 1 | PRIMARY | a | NULL | ALL | NULL | NULL | NULL | NULL | 32765 | 100.00 | Using where; Using join buffer (Block Nested Loop) |
| 5 | DEPENDENT SUBQUERY | PlayerDBFinance | NULL | ref | playerdbfinance_email_country | playerdbfinance_email_country | 194 | func | 2 | 100.00 | NULL |
| 4 | DEPENDENT SUBQUERY | PlayerDBFinance | NULL | ref | playerdbfinance_email_country | playerdbfinance_email_country | 194 | func | 2 | 100.00 | NULL |
| 3 | DEPENDENT SUBQUERY | PlayerDBFinance | NULL | ref | playerdbfinance_email_country | playerdbfinance_email_country | 194 | func | 2 | 33.33 | Using where |
| 2 | DEPENDENT SUBQUERY | PlayerDBFinance | NULL | ref | playerdbfinance_email_country | playerdbfinance_email_country | 194 | func | 2 | 100.00 | Using index |
+----+--------------------+-----------------+------------+-------+-------------------------------+-------------------------------+---------+------+--------+----------+----------------------------------------------------+