小编C-D*_*C-D的帖子

如何在mysql中缓存用于级联选择查询的子集

这是我偶然发现的另一个数据库问题。

我有一个日期范围分区的 MyIsam 查找表,其中包含 200M 条记录和约 150 列。在这个表上,我需要执行级联 SELECT-Statements 来过滤数据。输出:

filter 126M    
filter 110M    
filter 40M    
filter 5M    
filter 100k
Run Code Online (Sandbox Code Playgroud)

每一个 SELECT 都非常复杂,正则表达式(=没有索引可能)和多重比较,这就是为什么我希望他们查询尽可能少的行。

大约有 500 个独特的过滤器和大约 200 个固定用户。每个过滤器都需要为每个用户运行,总共大约 10 万个组合。

大问题:有没有办法让每个后续的 SELECT 语句只查询前一个子集?

示例:过滤器 #5 应该只需要查询查询 4 ​​中的 5M 行以获得那 100k 结果。目前它必须扫描所有 200M 记录。

编辑 当前方法:缓存表

CREATE TABLE IF NOT EXISTS `cache` (
  `filter_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `lookup_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ALTER TABLE `cache`
 ADD PRIMARY KEY (`filter_id`,`user_id`);
Run Code Online (Sandbox Code Playgroud)

这将包含来自查找表的各个数据行与过滤器之间的关系。另外,我可以使用 rrimary 索引从前一个过滤器中获取所有 …

mysql myisam select

5
推荐指数
1
解决办法
741
查看次数

标签 统计

myisam ×1

mysql ×1

select ×1