首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql -全球指数

问MySql -全球指数
EN

Database Administration用户
提问于 2012-02-12 14:45:53
回答 1查看 992关注 0票数 0

我对MySql分区很陌生,我有一个关于索引的问题。假设我有下表:

代码语言:javascript
复制
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进行查询时,表将如何执行,比如:

代码语言:javascript
复制
SELECT * FROM members where persona_id=3

有什么想法吗?

附注:我正在运行MySql 5.1 / innodb

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-02-12 22:10:21

您将无法对该表进行分区,因为您需要删除唯一键并将其改为常规索引。

要回答您的问题,如果您对没有分区的列进行查询,那么MySQL将逐个查询每个分区,直到它回答该查询为止。因此,如果在列上查询未对其进行分区的分区表,则可能会得到较慢的结果,如果该表未被分区。

这就是为什么您需要非常小心地选择要分区的列。

我会选择一个适合80%最重要用例的专栏。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/12721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档