【发布时间】:2011-06-12 04:11:07
【问题描述】:
我在一台服务器上运行了一个简单的 mysql 数据库,其中包含两个表:产品和评论。 products 表有大约 1000 万个条目,reviews 表有大约 3000 万个条目。
整个 Db 大约是 30Gb。我觉得它变慢了,我想知道我应该怎么做。我创建了索引,但没有帮助。例如,产品表有类别字段,当我做一个简单的select * from products where category=2 时 - 它只是很慢。
在这种情况下切换到 mongodb 会帮助我还是我可以通过某种方式优化 Mysql 来解决这个问题?在这种情况下我应该进行分片还是表的大小不是那么大,并且可以通过其他方式进行优化?
表格和 my.cnf
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL auto_increment,
`product_title` varchar(1000) NOT NULL,
`product_id` varchar(100) NOT NULL,
`title` varchar(1000) NOT NULL,
`image` varchar(1000) NOT NULL,
`url` varchar(1000) NOT NULL,
`price` varchar(100) NOT NULL,
`reviews` int(11) NOT NULL,
`stars` float NOT NULL,
`BrowseNodeID` int(11) NOT NULL,
`status` varchar(100) NOT NULL,
`started_at` int(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `id_index` (`BrowseNodeID`),
KEY `status_index` (`status`),
KEY `started_index` (`started_at`),
KEY `id_ind` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13743335 ;
CREATE TABLE IF NOT EXISTS `reviews` (
`id` int(11) NOT NULL auto_increment,
`product_id` varchar(100) NOT NULL,
`product_title` varchar(1000) NOT NULL,
`review_title` varchar(1000) NOT NULL,
`content` varchar(5000) NOT NULL,
`author` varchar(255) NOT NULL,
`author_profile` varchar(1000) NOT NULL,
`stars` float NOT NULL,
`owner` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `product_id` (`product_id`),
KEY `id_index` (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=48129737 ;
来自 my.cnf 的一些信息
set-variable = query_cache_size=1512M
set-variable = thread_cache_size=8
thread_concurrency = 8
skip-innodb
low-priority-updates
delay-key-write=ALL
key_buffer_size = 100M
max_allowed_packet = 1M
#table_open_cache = 4048
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 50M
set-variable = table_cache=256
set-variable = query_cache_limit=1024M
set-variable = query_cache_size=1024M
【问题讨论】:
-
你能提供你的 my.cnf 和表定义吗?
-
什么是“慢”?所涉及的表、索引或所涉及的查询/查询没有详细信息——听起来更像是您希望有理由切换到 mongodb。
-
分类栏的选择性是什么?也许索引根本无助于选择 * ....
-
@Chris Henry 整个 my.cnf?它很大。有什么特别的变量吗?
-
缓冲池大小最有帮助,具体取决于您使用的是 MyISAM 还是 InnoDB
标签: mysql mongodb scalability database