Sou novo no particionamento MySql e tenho uma dúvida sobre índices. digamos que eu tenha a seguinte tabela:
CREATE TABLE `members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`member_rating` int(11) DEFAULT '0',
`persona_id` int(11) NOT NULL,
`high_value_type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`,`user_id`),
UNIQUE KEY `user_id` (`user_id`,`persona_id`),
KEY `member_rating_index` (`member_rating`),
KEY `persona_index` (`persona_id`),
KEY `high_value_members_index` (`user_id`,`high_value_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
/*!50100 PARTITION BY HASH (user_id)
PARTITIONS 1000 */
pelo que entendi, tudo funcionará bem desde que eu consulte a tabela enquanto forneço user_id
, minha pergunta é: como a tabela funcionará quando eu fizer uma consulta sem user_id
, diga algo como:
SELECT * FROM members where persona_id=3
alguma ideia?
ps estou rodando no MySql 5.1 / innodb
Você não seria capaz de particionar essa tabela, pois precisa remover a chave exclusiva e torná-la um índice regular.
Para responder à sua pergunta, se você consultar uma coluna que não é particionada, o MySQL consultará todas as partições uma a uma até responder à consulta. Portanto, se você consultar uma tabela particionada em uma coluna na qual ela não está particionada, poderá obter resultados mais lentos do que se a tabela não fosse particionada.
É por isso que você precisa escolher a coluna que deseja particionar com muito cuidado.
Eu selecionaria uma coluna que se ajustasse a 80% dos casos de uso mais importantes.