gpt4 book ai didi

mysql - 冗余 MySQL 索引?

转载 作者:行者123 更新时间:2023-11-30 23:36:51 28 4
gpt4 key购买 nike

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,Timestamp)。

偶尔,我想做 EOD 报告,这样我就可以做类似 SELECT * WHERE Timestamp > Today() - 1 day 之类的事情。我还需要时间戳索引吗?

最佳答案

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

但是,对于这样的查询:

SELECT  *
FROM mytable
WHERE Timestamp > Today() - 1

不会使用 (tickerId, timestamp) 上的索引,因为 tickerId 上没有相等过滤器。

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

SELECT  m.*
FROM (
SELECT DISTINCT tickerId
FROM mytable
) md
JOIN mytable m
ON m.tickerId = md.tickerId
AND m.timestamp > TODAY() - 1

但是,后一种查询效率较低,尤其是当您在 tickerId 中有很多不同的值时。

关于mysql - 冗余 MySQL 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com