首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >冗余MySQL索引?

冗余MySQL索引?
EN

Stack Overflow用户
提问于 2011-07-14 22:23:04
回答 1查看 271关注 0票数 1
代码语言:javascript
复制
Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
 Edit    Drop   PRIMARY BTREE   Yes No  TickerID    23200   A       
Timestamp   13897209    A   
 Edit    Drop   TickerID    BTREE   No  No  TickerID    11737   A       
 Edit    Drop   Timestamp   BTREE   No  No  Timestamp   18  A       

~99,424,209 InnoDB  utf8_general_ci 5.1 GiB 

好的,在我尝试通过删除不需要的索引来“优化”这个数据库之前,我想我应该在这里问一下。这个表的命中率很高,所以我想提高插入性能。我在网上读了5篇文章,它们似乎表明tickerID上的单个索引是多余的,因为如果我只在TickerID上运行查询,就会使用多个索引(TickerID,时间戳)。

偶尔,我会喜欢做排爆报告,这样我就可以做一些像SELECT * WHERE Timestamp > Today() - 1 day或类似的事情。我也需要时间戳索引吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-14 22:28:09

只能使用tickerId上的索引的所有查询都可以使用tickerId, timestamp上的此索引。

但是,对于这样的查询:

代码语言:javascript
复制
SELECT  *
FROM    mytable
WHERE   Timestamp > Today() - 1

由于tickerId上没有相等筛选器,因此将不会使用(tickerId, timestamp上的索引。

对于此查询,应仅在timestamp上创建索引或重写у查询:

代码语言:javascript
复制
SELECT  m.*
FROM    (
        SELECT  DISTINCT tickerId
        FROM    mytable
        ) md
JOIN    mytable m
ON      m.tickerId = md.tickerId
        AND m.timestamp > TODAY() - 1

但是,后一种查询的效率较低,特别是当tickerId中有大量不同的值时。

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

https://stackoverflow.com/questions/6694758

复制
相关文章

相似问题

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