在MySQL中,如果对foo进行索引,是否会增加选择foo的性能?
在RedditMirror.cc,我有一个数据库,GrabbedSites表中有120万条记录,这个数字每天增加大约500-2000条。
在我职业生涯的早期,我被教导说,应该被索引的唯一的列就是那些
因此,GrabbedSites只有一个键索引(除了主键):categoryID,但是有8个列被查询。
该网站收到了惊人的闪光灯流量,有时超过100,000独特的访问者一天,和DB成为“税”约20%的使用。
所以我想知道,在MySQL中会有一个性能优势吗?将索引添加到所有的8个经常查询的列中?
编辑:查询是:
SELECT url,
title,
published,
reddit_key,
UNIX_TIMESTAMP(last_fetched) last_fetched,
comment_link
FROM GrabbedSites
WHERE published BETWEEN DATE_SUB('2010-09-03', INTERVAL 1 DAY)
AND '2010-09-03'
ORDER BY published;只有索引是“发布”的。
解释说:使用where;使用文件
发布于 2010-09-04 03:07:41
首先要注意的是,MySQL每个psuedo只使用一个索引- SELECT (not语句)-当您使用EXPLAIN查看SELECT输出时,您将看到每个选择哪个索引。解释只能在SELECT上运行,所以我们必须假设DELETE/UPDATE在交换SELECT语法时使用相同的计划.
据我所知,大多数数据库(嵌入数据库)都支持在以下子句中使用索引:
我不是100%的人,所以我暂时忽略它。
最终,它是根据它的算法和它手头的统计数据来选择要使用什么的优化器。您可以使用分析表语法刷新统计数据(定期,而不是经常请)。
附录
MySQL还限制了分配索引- MyISAM表为1,000个字节,InnoDB表为767字节的空间。由于MySQL只使用每个psuedo选择的一个索引,覆盖索引(包含多个列的索引)是个好主意,但它实际上涉及到测试最常见的查询&尽可能地优化它。索引编制的优先事项应是:
发布于 2010-09-04 03:01:31
如果要对这些列进行筛选,则可能会提高性能。因为您的数据库大多是只读的(您每天只获得500-2000行,并且可能没有更新那么多),所以您可以给它一个机会。如果添加这些索引,肯定不会对数据库造成太大的损害。
https://stackoverflow.com/questions/3640699
复制相似问题