小编Vér*_*ace的帖子

快速从 PostgreSQL 表中获取真正的 RANDOM 行

我以前总是这样做:

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 中的表中抓取随机记录的实际命令是什么,该命令并没有慢到需要几秒钟才能获得一个体面大小的表?

postgresql random select postgresql-performance

3
推荐指数
2
解决办法
3397
查看次数

是否可以在 MySQL 5.7 中自动生成 Unix 毫秒时间戳

我在 MySQL 5.7 表中创建了一个created_time字段BIGINT,现在我想在插入记录时自动生成一个 Unix 毫秒时间戳。是否有可能做到这一点?我尝试了下面的代码,但失败了:

ALTER TABLE db.video_info MODIFY COLUMN created_time bigint(20) 
  DEFAULT (ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)) NULL;
Run Code Online (Sandbox Code Playgroud)

mysql timestamp default-value

3
推荐指数
1
解决办法
393
查看次数

将 n 个问题分发给 m 个学生,所有学生的问题相同但顺序不同

我正在使用 PHP 和 MySQL 构建一个在线考试平台。我对数据库有以下要求:

  • 试题为 MCQ 类型,共有 20 道题。
  • 有30名学生参加考试。

有没有办法让这 30 名学生按不同的顺序收到 20 个问题?例如,学生 A 的问题 1 将是学生 B 的问题 16?

mysql phpmyadmin

2
推荐指数
1
解决办法
86
查看次数

基数估计有所不同的查询执行计划示例

我正在尝试创建一个查询执行计划的示例,它表明如果我对表的某些列进行基数估计,我可以决定哪个查询执行计划的成本最低。

所以我有这两篇文章(12),我可以将估计基数理解为列上不同值的数量。然后我计算选择性。

SELECT max(price) FROM tickets WHERE country = "CANADA";
Run Code Online (Sandbox Code Playgroud)

如果我的桌子有 180 件物品,而只有 10 件是加拿大的。而且只有 4 个不同的国家(加拿大、巴西、美国、德国)。所以....

列 country é 4的基数,因为它是不同项目的数量。

列 country = CANADA的选择性是访问的项目数除以表中的项目数。10/180 = 0.0555。

但是优化器可以根据基数选择哪些不同的查询执行计划?

如果这不是一个很好的例子,有人可以指出一个查询,基数对于优化器来说是一种财富,以便决定选择一个计划还是另一个计划?

谢谢,费利佩

sql-server optimization execution-plan cardinality-estimates

2
推荐指数
1
解决办法
311
查看次数

从 Postgres 中的文本列解析 JSON 数据

我有JSON一个文件如下:

[xyz@innolx20122 ~]$ cat cgs_test.json
{"technology":"AAA","vendor":"XXX","name":"RBNI","temporal_unit":"hour","regional_unit":"cell","dataset_metadata":"{\"name\": \"RBNI\", \"temporal_unit\": \"hour\", \"technology\": \"LTE\", \"is_dimension\": false, \"timestamp_column_pattern\": \"yyyyMMddHHmmss\", \"data_type\": \"PM\", \"source_name\": \"RBNI\", \"intervals_epoch_seconds\": [[1609941600, 1609945200]], \"identifier_column_names\": [\"CELLID\", \"CELLNAME\", \"radio_frequency_band\", \"ENODEBID\", \"ENODEBNAME\", \"SBNID\", \"SITEID\", \"SITENAME\", \"CLUSTER_PRIORITY\", \"CP_SITE\", \"IBC\", \"NETWORK_TIER\", \"SITE_TYPE\", \"T3_FLAG\", \"CLUSTERID\", \"CLUSTERNAME\", \"REGION\", \"NETWORK\"], \"vendor\": \"ZTE\", \"timestamp_column_name\": \"COLLECTTIME\", \"regional_unit\": \"cell\"}","rk":1}
{"technology":"AAA","vendor":"XXX","name":"RRCADD","temporal_unit":"hour","regional_unit":"cell","dataset_metadata":"{\"name\": \"RRCADD\", \"temporal_unit\": \"hour\", \"technology\": \"AAA\", \"is_dimension\": false, \"timestamp_column_pattern\": \"yyyyMMddHHmmss\", \"data_type\": \"PM\", \"source_name\": \"RRCADD\", \"intervals_epoch_seconds\": [[1609941600, 1609945200]], \"identifier_column_names\": [\"CELLID\", \"CELLNAME\", \"radio_frequency_band\", \"ENODEBID\", \"ENODEBNAME\", \"SBNID\", \"SITEID\", \"SITENAME\", \"CLUSTER_PRIORITY\", \"CP_SITE\", \"IBC\", \"NETWORK_TIER\", \"SITE_TYPE\", …
Run Code Online (Sandbox Code Playgroud)

postgresql

2
推荐指数
1
解决办法
852
查看次数

轻松修复碎片堆索引的最佳选择是什么?

我在这些服务器上有 SQL Server 2008 R2 SP2 和 SQL Server 2012 SP2。

我有一个数据库,其中有很多堆索引超过 90% 的碎片。

轻松修复这些堆索引的最佳选择是什么?

performance sql-server sql-server-2008-r2 sql-server-2012

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

PostgreSQL - 不同月份的最大总和与多年的关系

这个问题是关于MySQL 5.6这里的一个问题的PostgreSQL 版本。最初,这是两个 RDBMS 的一个问题,但有人建议我,鉴于两个系统的不同功能,我应该拆分问题 - 特别是我认为 CTE(WITH 子句)应该使查询更加优雅和可读!

假设我有一个肿瘤列表(这个数据是根据真实数据模拟的):

CREATE table illness (nature_of_illness VARCHAR(25), created_at DATETIME);

INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung',   '2018-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung',   '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung',   '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', …
Run Code Online (Sandbox Code Playgroud)

postgresql cte greatest-n-per-group

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

触发器和事务之间的区别

我正在实施电影分级服务,所以我正在考虑使用触发器或事务。

我正在考虑的是将电影信息插入到 movie_list 中,并将该电影的类型插入到 movie_genre_list 中。

在这种情况下,我的想法是编写一个触发器,在插入电影信息时插入流派。

但是,我不知道触发器或事务是否适合这种情况。我该怎么办?

trigger transaction

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

非常大的 MySQL 备份

我们公司有一个非常大的 MySQL 服务器,有近 1000 个数据库,总大小为 500 GB。每个客户都有自己的数据库。而每个数据库大约有120-125张表!

过去我们使用mysqldump进行备份。服务器在创建备份时非常慢,几乎需要 5 个小时才能完成备份。数据库中有 99% 的 Innodb 表。

我知道备份大量数据需要花费大量时间。但备份的最佳解决方案是什么?问题是我们的客户全天候 (24/7) 使用我们的网络应用程序。进行备份时系统非常慢。

mysql backup

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

RDBMS:存储数据的正确方法 - 逗号分隔的变量还是不同的字段或表?

我似乎无法找到答案的基本问题。我有一个数据库,用于存储收据中的行项目以及用户名和收据编号。

现在该lineItem列只是一长串由逗号分隔的数据(原始文件似乎只是一个 Excel 文件)。此信息在 PHP 脚本中解析,以便在前端查看。

该表如下所示:

|----------|----------|----------|
|lineItem  |receiptID |customerID|
|----------|----------|----------|
|CD, DVD,  |001       |User01    |
|----------|----------|----------|
|CD, CD,   |002       |User02    |
|DVD, usb, |          |          |
|----------|----------|----------|
Run Code Online (Sandbox Code Playgroud)

最终,这是不好的做法吗?这些lineItem值是否应该链接到另一个表中的相关值?

mysql database-design relational-theory csv codds-rules

0
推荐指数
1
解决办法
128
查看次数