我以前总是这样做:
SELECT column FROM table ORDER BY random() LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
对于大表,这令人难以忍受,慢得令人难以置信,以至于在实践中毫无用处。这就是为什么我开始寻找更有效的方法。人们推荐:
SELECT column FROM table TABLESAMPLE BERNOULLI(1) LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
虽然速度很快,但它也提供了毫无价值的随机性。它似乎总是选择相同的该死的记录,所以这也毫无价值。
我也试过:
SELECT column FROM table TABLESAMPLE BERNOULLI(100) LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
它提供了更糟糕的随机性。它每次都选择相同的几条记录。这是完全没有价值的。我需要实际的随机性。
为什么仅选择随机记录显然如此困难?为什么它必须抓取每条记录然后对它们进行排序(在第一种情况下)?为什么“TABLESAMPLE”版本总是抓取相同的愚蠢记录?为什么它们不是随机的?当它一遍又一遍地选择相同的几条记录时,谁会想要使用这个“BERNOULLI”的东西?我不敢相信,经过这么多年,我仍然在询问随机记录……这是最基本的查询之一。
用于从 PG 中的表中抓取随机记录的实际命令是什么,该命令并没有慢到需要几秒钟才能获得一个体面大小的表?