我对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的同时查询表,一切都会正常工作,我的问题是:当我不使用user_id进行查询时,表将如何执行,比如:
SELECT * FROM members where persona_id=3有什么想法吗?
附注:我正在运行MySql 5.1 / innodb
发布于 2012-02-12 22:10:21
您将无法对该表进行分区,因为您需要删除唯一键并将其改为常规索引。
要回答您的问题,如果您对没有分区的列进行查询,那么MySQL将逐个查询每个分区,直到它回答该查询为止。因此,如果在列上查询未对其进行分区的分区表,则可能会得到较慢的结果,如果该表未被分区。
这就是为什么您需要非常小心地选择要分区的列。
我会选择一个适合80%最重要用例的专栏。
https://dba.stackexchange.com/questions/12721
复制相似问题