首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中,如果对foo进行索引,是否会增加选择foo的性能?

问在MySQL中,如果对foo进行索引,是否会增加选择foo的性能?
EN

Stack Overflow用户
提问于 2010-09-04 02:51:47
回答 2查看 203关注 0票数 4

在MySQL中,如果对foo进行索引,是否会增加选择foo的性能?

在RedditMirror.cc,我有一个数据库,GrabbedSites表中有120万条记录,这个数字每天增加大约500-2000条。

在我职业生涯的早期,我被教导说,应该被索引的唯一的列就是那些

  1. 将来将在何处执行或加入选择/更新,
  2. 需要它们成为唯一的数据。

因此,GrabbedSites只有一个键索引(除了主键):categoryID,但是有8个列被查询。

该网站收到了惊人的闪光灯流量,有时超过100,000独特的访问者一天,和DB成为“税”约20%的使用。

所以我想知道,在MySQL中会有一个性能优势吗?将索引添加到所有的8个经常查询的列中?

编辑:查询是:

代码语言:javascript
复制
  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;使用文件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-04 03:07:41

首先要注意的是,MySQL每个psuedo只使用一个索引- SELECT (not语句)-当您使用EXPLAIN查看SELECT输出时,您将看到每个选择哪个索引。解释只能在SELECT上运行,所以我们必须假设DELETE/UPDATE在交换SELECT语法时使用相同的计划.

据我所知,大多数数据库(嵌入数据库)都支持在以下子句中使用索引:

  • 选择
  • 联接(ANSI-92语法)
  • 哪里(因为这里有ANSI-89和过滤)
  • 拥有(等同的地方,但不像WHERE -允许聚合使用而不需要子查询)
  • 命令由

我不是100%的人,所以我暂时忽略它。

最终,它是根据它的算法和它手头的统计数据来选择要使用什么的优化器。您可以使用分析表语法刷新统计数据(定期,而不是经常请)。

附录

MySQL还限制了分配索引- MyISAM表为1,000个字节,InnoDB表为767字节的空间。由于MySQL只使用每个psuedo选择的一个索引,覆盖索引(包含多个列的索引)是个好主意,但它实际上涉及到测试最常见的查询&尽可能地优化它。索引编制的优先事项应是:

  1. 主键(在v5的某个地方,为pk创建索引变得自动)
  2. 外键(下一个最有可能加入的候选键)
  3. 过滤标准(假设你有空间)
票数 1
EN

Stack Overflow用户

发布于 2010-09-04 03:01:31

如果要对这些列进行筛选,则可能会提高性能。因为您的数据库大多是只读的(您每天只获得500-2000行,并且可能没有更新那么多),所以您可以给它一个机会。如果添加这些索引,肯定不会对数据库造成太大的损害。

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

https://stackoverflow.com/questions/3640699

复制
相关文章

相似问题

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