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或类似的事情。我也需要时间戳索引吗?
发布于 2011-07-14 22:28:09
只能使用tickerId上的索引的所有查询都可以使用tickerId, timestamp上的此索引。
但是,对于这样的查询:
SELECT *
FROM mytable
WHERE Timestamp > Today() - 1由于tickerId上没有相等筛选器,因此将不会使用(tickerId, timestamp上的索引。
对于此查询,应仅在timestamp上创建索引或重写у查询:
SELECT m.*
FROM (
SELECT DISTINCT tickerId
FROM mytable
) md
JOIN mytable m
ON m.tickerId = md.tickerId
AND m.timestamp > TODAY() - 1但是,后一种查询的效率较低,特别是当tickerId中有大量不同的值时。
https://stackoverflow.com/questions/6694758
复制相似问题