1)С партицированием сейчас очень не просто, это сильно усложнит переделку всех запросов.
2)Айпи без разницы как хранить, я там делал count по id скорость работы точно такая же, так что скорее всего дистинкт довольно легкий.
3)Какой выигрыш от timestamp?
explain
-> SELECT
-> COUNT(DISTINCT(ipaddress)) as uniquenotcloaked
-> FROM accounts a
-> WHERE cloaked = 0 and date_visited BETWEEN STR_TO_DATE('2013-05-01 00:00:01', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2013-07-18 23:59:59', '%Y-%m-%d %H:%i:%s') AND a.server_id IN (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,28,30,32);
+----+-------------+-------+------+-----------------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+-----------------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
| 1 | SIMPLE | a | ref | Index_date_visited,Index_cloaked,Index_8,date_server,date_server_cloak,cloak_date,cloak_server,date_cloak | Index_cloaked | 5 | const | 1606951 | Using where |
+----+-------------+-------+------+-----------------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
1 row in set (0.00 sec)
Понасоздавал индексов разных
explain SELECT
-> COUNT(DISTINCT(ipaddress)) as uniquenotcloaked
-> FROM accounts a
-> IGNORE INDEX ( Index_cloaked )
-> WHERE date_visited BETWEEN STR_TO_DATE('2013-05-01 00:00:01', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2013-07-18 23:59:59', '%Y-%m-%d %H:%i:%s') AND a.server_id IN (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,28,30,32) AND cloaked = 0;
+----+-------------+-------+------+---------------------------------------------------------------------------------------------+------------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------------------------------------------------------------------------------------+------------+---------+-------+---------+-------------+
| 1 | SIMPLE | a | ref | Index_date_visited,Index_8,date_server,date_server_cloak,cloak_date,cloak_server,date_cloak | cloak_date | 5 | const | 1683931 | Using where |
+----+-------------+-------+------+---------------------------------------------------------------------------------------------+------------+---------+-------+---------+-------------+
1 row in set (0.00 sec)
Второй индекс который ему нравится
explain SELECT
-> COUNT(DISTINCT(ipaddress)) as uniquenotcloaked
-> FROM accounts a
-> IGNORE INDEX ( cloak_date )
-> WHERE date_visited BETWEEN STR_TO_DATE('2013-05-01 00:00:01', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2013-07-18 23:59:59', '%Y-%m-%d %H:%i:%s') AND a.server_id IN (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,28,30,32) AND cloaked = 0;
+----+-------------+-------+------+------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
| 1 | SIMPLE | a | ref | Index_date_visited,Index_cloaked,Index_8,date_server,date_server_cloak,cloak_server,date_cloak | Index_cloaked | 5 | const | 1606951 | Using where |
+----+-------------+-------+------+------------------------------------------------------------------------------------------------+---------------+---------+-------+---------+-------------+
1 row in set (0.00 sec)
При это я так понимаю в обоих случаях индекс не используется, так как обычно в конце пишется using where; using index;
Как бы получить оплату по визе не так просто, и отвечать перед законом очень тоже не просто, попробуйте посидеть в обезьяннике 15 дней, а подумайте что в тюрьме творится.
В интернет магазинах используются длительные холды, если кидалово и обращение по нему, деньги вернут.
2)Айпи без разницы как хранить, я там делал count по id скорость работы точно такая же, так что скорее всего дистинкт довольно легкий.
3)Какой выигрыш от timestamp?