Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在超大MYSQL表中查找varchar列的不同值_Mysql_Sorting_Unique_Distinct - Fatal编程技术网

在超大MYSQL表中查找varchar列的不同值

在超大MYSQL表中查找varchar列的不同值,mysql,sorting,unique,distinct,Mysql,Sorting,Unique,Distinct,我想在一个超大的MYSQL表10亿行中找到varchar列的不同值。我有以下解决方案: 1. select distinct(col_name) from mytable; 2. export this column to a text file incrementally(select col_name from mytable where myid>x and myid<x+n), then use linux sort sort myfile.txt | uniq -u 第

我想在一个超大的MYSQL表10亿行中找到varchar列的不同值。我有以下解决方案:

1. select distinct(col_name) from mytable; 2. export this column to a text file incrementally(select col_name from mytable where myid>x and myid<x+n), then use linux sort sort myfile.txt | uniq -u 第1种方法的问题是,即使列被索引,查询也可能在很长一段时间内崩溃,然后需要重新开始。 我倾向于第二条路,还有其他更快的路吗

... ... 按列名称从mytable组中选择列名称; 即使它们返回相同的结果集,这两个查询实际上使用不同的执行计划,我注意到,在某些情况下,这两个组的执行速度要比MySQL中的DISTINCT快一些


我支持Sping_plate关于该指数的评论。如果你已经有了一个,那么获得结果的痛苦应该会小得多。你的索引的基数是多少?

遗憾的是,我以前在MySQL上也不得不求助于这种胡说八道。如果你不能直接提取索引,而且分组的速度也不快,不知道为什么会这样,那么在@Ben..的帖子中,你可以尝试将问题分段以批处理


我仍然使用MySQL,它可能比您自己编写或在UNIX命令行上执行的任何操作都要快。将其视为DW中的物化视图或聚合表—一种简单的方法是创建一个批处理脚本,该脚本通过合并或其他机制将小范围的DISTINCTS选择到第二个表中,该表中只有不同的值。这是更可批处理的,但您会遇到相同的性能问题,只是分布在各个作业中。您必须对参数batch size进行实验。如果您在生产环境中运行此程序,并且人们希望获得所有不同的值,就像他们直接查询数据库一样,那么最好为当前批处理提供3个表,一个是原始表,一个是临时表,还有一个包含最新值和日期修改列的活动表。

您的列在数据库中被索引了吗?@Zak:是的,它被索引了,但是考虑到大小,它仍然太慢,无法进行区分。如果它已经被索引了,那么获取不同的值就是获取索引键的问题。这几乎肯定会比unix更快method@spinning_plate:我编辑帖子以获得更多关注和更正。Morel:基数相对于表的大小来说很低。这是一件好事。试一试,是在繁忙的生产服务器上吗?并行处理和合并似乎是一个有趣的建议。在每一批中,你都可以减少输入量,但你必须不断地合并它,在这种情况下,它会比一个过程更快吗?我必须同意,我找不到任何认真的研究来证实我的经验。可能确实取决于查询和数据。@user775187-不。我不得不做类似的事情,因为查询会超时-我主要是回应主要问题中的评论