我是 MySql 分区的新手,对索引有疑问。假设我有下表:
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 */
据我了解,只要我在提供时查询表,一切都会正常工作user_id
,我的问题是:当我使用 out 进行查询时,表将如何执行user_id
,比如:
SELECT * FROM members where persona_id=3
有任何想法吗?
ps 我在 MySql 5.1 / innodb 上运行
您将无法对该表进行分区,因为您需要删除唯一键并将其改为常规索引。
要回答您的问题,如果您查询未分区的列,则 MySQL 将逐个查询每个分区,直到它回答查询。因此,如果您在未分区的列上查询分区表,那么如果表未分区,您可能会得到更慢的结果。
这就是为什么您需要非常仔细地选择要分区的列。
我会选择适合 80% 最重要用例的列。