gpt4 book ai didi

mysql - 运行 myisamchk --sort-records 后无意义的 SELECT 结果

转载 作者:行者123 更新时间:2023-11-29 02:26:59 24 4
gpt4 key购买 nike

我有这张表:

CREATE TABLE `mytable` (
`date` date NOT NULL,
`parameters` mediumint(8) unsigned NOT NULL,
`num` tinyint(3) unsigned NOT NULL,
`val1` int(11) NOT NULL,
`val2` int(10) NOT NULL,
`active` tinyint(3) unsigned NOT NULL,
`ref` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ref`) USING BTREE,
KEY `parameters` (`parameters`)
) ENGINE=MyISAM AUTO_INCREMENT=79092001 DEFAULT CHARSET=latin1

有 1170 个不同的“日期”,大约 67000 个不同的“参数”,每一对(日期、参数)都是独一无二的。

我正在尝试加速一个简单的 SELECT:

SELECT parameters, sum(val1) from mytable where parameters=(one random value)

我已经为“参数”编制了索引。该请求大约需要 8 秒才能返回。

我测试了“myisamchk --sort-records”以根据我的“参数”索引对记录进行排序。

结果一开始看起来不错,请求在 0.0 秒内运行。

然而,当正确检查结果值时,我意识到在

的情况下存在一个大问题
SELECT parameters, sum(val1) from mytable where parameters=10

我得到的结果是:

parameters= 10522 (!!!)
sum(val1)= 0

对于请求中所有不同的参数值都是一样的,结果返回的参数字段根本不对应......

我不明白会发生什么。


更多信息:我试过了,它返回了正确的参数(在本例中为 =10)

SELECT val1 from mytable IGNORE INDEX(parameters) WHERE parameters=10;

这让我觉得索引搞砸了。在对行进行排序后,我还没有读到任何关于重新索引的内容,但这可能是有道理的。它是否记录在任何地方?


我随后删除了索引并重新创建了它,它解决了问题,但并没有解释它。此外,我的请求现在花费的时间和以前一样多(最多 8 秒),有没有办法让这个 myisamchk 数据排序按照我想要的方式工作,并提高速度?

最佳答案

再次运行 myisamchk --sort-records。之后运行 CHECK TABLE mytable 并查看它告诉您的内容。 MyISAM 不是很稳定,所以如果在排序过程中出现问题,索引可能会被搞砸。

如果索引已损坏,这应该会显示,您可以运行 REPAIR TABLE mytable。这将修复索引。看看您的查询是再次变慢还是现在变快了。

如果所有这些都没有帮助,您还有几个选择:

  1. 如果可能,插入已按参数排序的行
  2. 创建分区:创建表 mytable(
    ...)
    哈希分区(参数)
    分区 10;
    这也会大大增加查询时间。

关于mysql - 运行 myisamchk --sort-records 后无意义的 SELECT 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19803335/

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