我正在尝试弄清楚如何构建这个查询,但遇到了一些困难。
基本上,我试图获取一行中最常用的 id 的计数,其中 id 代表另一个表中的对象,但 id 可以出现在 2 列中。
当我只是钻一列时,这个查询工作得很好:
SELECT rb_1,
Count(*) AS num
FROM ci_lineups
GROUP BY rb_1
ORDER BY Count(*) DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
但现在我想做类似的事情,除了检查一个名为rb_2as well 的列,该列可以包含所有 id 的列rb_1。
当我尝试按 2 列进行分组时,它仅将组视为两列的组合。
如果我使用第一个查询两次(每列一次),我可以用 PHP 编写一个快速脚本来对计数进行组合和排序,但我认为可能有一种方法可以使用 MySQL 来实现此目的。
为了查找表中每小时存在的行数temperatures,我在带有 TimescaleDB 1.6.0 扩展的 PostgreSQL 11.2 数据库上运行了一系列 SQL 查询。temperatures是一个 TimescaleDB 超表。
例如,
SELECT COUNT(*) FROM temperatures
WHERE DATE_PART('year', "timestamp") = 2020
AND DATE_PART('month', "timestamp") = 2
AND DATE_PART('day', "timestamp") = 2
AND DATE_PART('hour', "timestamp") = 0
AND DATE_PART('minute', "timestamp") = 0
Run Code Online (Sandbox Code Playgroud)
问题:但是,这个查询似乎非常慢(我认为),每个查询大约需要 6-8 秒,并且该数据库上没有运行其他查询。该表temperatures包含 1150 万行。每小时大约有 100-2000 行。
寻找有关提高此类查询速度的建议。谢谢!
我正在使用 elasticsearch 从 Rails 应用程序中获取快速结果。我想知道执行特定查询需要多长时间?是否有任何工具可以查找和比较执行时间以便优化查询?
我正在尝试从 SQL 表中检索每条记录的最新数据。每条记录都会有重复的数据,并有一些数据变化。我需要检索最新的带时间戳的数据。有人可以建议哪个是性能方面的最佳解决方案吗?见过一些带有内部联接和子查询的解决方案。
下面给出的示例数据
Technology Students Amount Area Date
python 500 1000 Bangalore 2021-08-06 12:03:26
Ruby 100 1000 Bangalore 2021-08-06 05:18:50
Java 300 1000 Bangalore 2021-08-06 18:23:40
python 900 1000 Bangalore 2021-08-06 16:23:30
Java 100 1000 Bangalore 2021-08-06 12:23:50
Ruby 500 1000 Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)
我的 O/P 应该包含每种技术的最新数据
Technology Students Amount Area Date
Java 300 1000 Bangalore 2021-08-06 18:23:40
python 900 1000 Bangalore 2021-08-06 16:23:30
Ruby 500 1000 Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud) mysql query-optimization database-performance groupwise-maximum
我正在为我的公司建立一个原始数据仓库,并且我已经成功地将联系人、公司、交易和关联数据从我们的 CRM 提取到 bigquery 中,但是当我将这些数据连接到一个主表中以通过我们的 BI 平台进行分析时,我不断收到错误:
Query exceeded resource limits. This query used 22602 CPU seconds but would charge only 40M Analysis bytes. This exceeds the ratio supported by the on-demand pricing model. Please consider moving this workload to the flat-rate reservation pricing model, which does not have this limit. 22602 CPU seconds were used, and this query must use less than 10200 CPU seconds.
因此,我正在寻求优化我的查询。我已经删除了所有GROUP BY命令ORDER BY,并尝试使用WHERE命令进行额外的过滤,但这对我来说似乎不合逻辑,因为它会增加处理需求。
我当前的查询是:
SELECT
coy.company_id,
cont.contact_id,
deals.deal_id, …Run Code Online (Sandbox Code Playgroud) 我们有一个由 3 个主节点(每个 4 核、16 GB RAM)、3 个热节点(每个 8 核、32 GB RAM、300 GB SSD)和 3 个热节点(每个 8 核、32GB RAM、1.5TB HDD)组成的集群。 。
我们按照 的命名约定为一年中的每个月都有一个索引voucher_YYYY_MMM(eg voucher_2021_JAN)。所有这些索引都有一个voucher充当读取别名的别名,我们的搜索查询针对该读取别名。
我们的索引在热节点上驻留 32 天,在此期间它将接收 99% 的写入。我们估计该索引中的数据约为 4.8 亿个文档,它有 1 个副本和 16 个分片(我们采用了 16 个分片,因为最终我们的数据会增长,现在我们正在考虑缩小到 8 个分片,每个分片有 30 GB数据,根据我们的映射,200 万个文档占用 1GB 空间)。
32天后索引将转移到温节点,目前,我们的热索引中有4.5亿个文档,温索引中有18亿个文档。文档总数达 22.5 亿篇。
我们的文档包含客户 ID 和我们正在应用过滤器的一些字段,它们全部映射为关键字类型,我们用于custom routing on customer id提高搜索速度。
我们典型的查询看起来像
GET voucher/_search?routing=1000636779&search_type=query_then_fetch
{
"from": 0,
"size": 20,
"query": {
"constant_score": {
"filter": {
"bool": {
"filter": [
{
"term": …Run Code Online (Sandbox Code Playgroud) performance query-optimization database-performance elasticsearch elastic-stack
如何识别 Postgres 函数中的慢查询?
例如:
CREATE OR REPLACE FUNCTION my_function ()
RETURNS void AS $$
BEGIN
query#1;
query#2; --> slow query (duration 4 sec)
query#3;
query#4;
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
执行后,my_function()我在 Postgres 日志文件中得到如下内容:
持续时间:4.904 ms 语句:select my_function ();",,,,,,,,,"psql"
所以我无法识别函数中的慢速查询。
我有一个conversation_views包含列的表:user_id | conversation_id | viewed_at
还有一个INDEX on conversation_views (conversation_id, user_id)
我想查询:
select
max(viewed_at)
from conversation_views
where
conversation_id=%L
and user_id=%L
Run Code Online (Sandbox Code Playgroud)
通过此索引,该查询的性能是否良好,或者我可以使用其他策略吗?我正在使用 Postgres 9.6.12。
sql postgresql query-optimization database-indexes postgresql-9.6
我有一列数据类型图像,这些值看起来与此类似:
0x...32004200460054004F005600310048003600530051003800310065003000430043005500550035003500340033003700380056004200470034003100 47004F004A00460030004C003100370030005200380054003600370045004F00320032004E005600360039004C00...
我必须仅使用图像值的特定序列。我需要将其转换为类似字符的数据类型(VARCHAR?),如下所示:
2BFTOV1H6SQ81e0CCUU554378VBG41GOJF0L170R8T67EO22NV69L
转换过程如下:
每隔两对省略一次(始终为 00),剩下的代表所需结果的 ASCII 代码(32 -> 2, 42 -> B, ...)。
我需要对此进行调整,因为我必须应用它数百万次。现在我赚了1 mio。3分钟内排。
我当前的尝试是这个 SQL 标量函数:
ALTER FUNCTION [dbo].[F_Get_CClip](@pi_content_referral_blob IMAGE)
RETURNS VARCHAR(53)
AS
BEGIN
DECLARE @l_content_referral_blob VARCHAR(107),
@l_position INTEGER,
@l_text_ascii VARCHAR(53)
IF NOT @pi_content_referral_blob IS NULL AND LEN(CONVERT(VARBINARY(MAX), @pi_content_referral_blob)) > 187
BEGIN
SET @l_content_referral_blob = SUBSTRING(CONVERT(VARCHAR(188), CONVERT(VARBINARY(188), @pi_content_referral_blob)), 29, 105)
SET @l_position = 1
SET @l_text_ascii = ''
WHILE @l_position < LEN(@l_content_referral_blob) + 1
BEGIN
SET @l_text_ascii = @l_text_ascii + SUBSTRING(@l_content_referral_blob, @l_position, 1)
SET @l_position …Run Code Online (Sandbox Code Playgroud) 使用范围条件与同一张表进行自连接。下面是sql语句。
select
current_rec .*
,compare_rec.employee_id as less_salary_employee
from
hr.employees current_rec
left join hr.employees compare_rec
on current_rec.hire_date < compare_rec .hire_date and current_rec.salary < compare_rec.salary
order by current_rec .employee_id ;
Run Code Online (Sandbox Code Playgroud)
对于300K记录,需要更多45~60分钟。经过谷歌搜索后,我发现 Binned range join 优化会有所帮助。我阅读这篇文章是为了提高查询性能。[https://select.dev/posts/snowflake-range-join-optimization#how-to-optimize-range-joins-in-snowflake][1]。但无法理解。有人可以解释一下吗?。特别分箱范围优化部分。如果您提供有帮助的视觉表示
postgresql ×4
sql ×4
mysql ×2
performance ×2
count ×1
datetime ×1
etl ×1
function ×1
group-by ×1
indexing ×1
kibana ×1
plpgsql ×1
sql-server ×1