小编End*_*oth的帖子

更新查询中的性能问题

我对查询性能有一点疑问.基本上,我有超过1C记录的表.我有一个主键作为sl_id该表中的列.Currenly,我将表列更新statustrue(默认false)使用sl_id.

在我的程序中,我将在数组中具有sl_id唯一性status.我正在使用每个更新trueas sl_id(总是)sl_id.

我怀疑:

我应该通过指定每个更新IN状态的条件来使用每个更新查询吗?

(要么)

我应该使用sl_id运算符并将所有sl_id唯一值status放在一个查询中吗?

哪一个会更快?

给我一些建议.

sql postgresql sqlperformance

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

Postgres不是表现

您好任何想法如何加快这个查询?

输入

EXPLAIN SELECT entityid FROM entity e

LEFT JOIN level1entity l1 ON l1.level1id = e.level1_level1id
LEFT JOIN level2entity l2 ON l2.level2id = l1.level2_level2id
WHERE 

l2.userid = 'a987c246-65e5-48f6-9d2d-a7bcb6284c8f' 
AND 
(entityid NOT IN 
(1377776,1377792,1377793,1377794,1377795,1377796... 50000 ids)
)
Run Code Online (Sandbox Code Playgroud)

产量

Nested Loop  (cost=0.00..1452373.79 rows=3865 width=8)
  ->  Nested Loop  (cost=0.00..8.58 rows=1 width=8)
        Join Filter: (l1.level2_level2id = l2.level2id)
        ->  Seq Scan on level2entity l2  (cost=0.00..3.17 rows=1 width=8)
              Filter: ((userid)::text = 'a987c246-65e5-48f6-9d2d-a7bcb6284c8f'::text)
        ->  Seq Scan on level1entity l1  (cost=0.00..4.07 rows=107 width=16)
  ->  Index Scan using fk_fk18edb1cfb2a41235_idx …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-performance

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

使用LIMIT的慢速Postgres查询

我遇到了一个与PostgreSQL查询类似的问题,但限制为1的速度非常慢,带ORDER和LIMIT子句的PostgreSQL 速度非常慢,尽管在我的情况下,是否LIMIT为1、5或500 都没有关系。

基本上,当我无限制地运行由Django的ORM生成的查询时,该查询花费了半秒钟,但有限制(为分页而增加)则需要7秒钟。

耗时7秒的查询是:

SELECT "buildout_itemdescription"."product_code_id",
         MIN("buildout_lineitem"."unit_price") AS "min_price"
FROM "buildout_lineitem"
INNER JOIN "buildout_itemdescription"
    ON ("buildout_lineitem"."item_description_id" = "buildout_itemdescription"."id")
WHERE (("buildout_lineitem"."report_file_id" IN (154, 172, 155, 181, 174, 156, 157, 182, 175, 176, 183, 158, 177, 159, 179, 178, 164, 180, 367, 165, 173, 166, 167, 168, 368, 422, 370, 169, 1335, 1323, 161, 160, 162, 170, 171, 676, 151, 163, 980, 152, 369, 153, 963, 1718, 881, 617, 1759, 1780, …
Run Code Online (Sandbox Code Playgroud)

postgresql database-performance sql-limit

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

将时间戳和用户名添加到日志中

我在我的 settings.py 中设置了日志记录,我想知道是否可以添加到错误日志行 - 哪个用户遇到了错误和问题的时间戳。这可能吗?

当前代码

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

python django logging

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

通过 Django ORM 在 MySQL 中实现非二进制 LIKE

这是这个问题的后续内容。虽然我可以在原始 SQL 中编写非二进制 LIKE 查询,例如 - SELECT COUNT(*) FROM TABLE WHERE MID LIKE 'TEXT%',但我想知道是否可以通过 Django ORM 来实现。

和似乎startswithcontains在使用二进制模式搜索。

mysql django django-orm

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

如何聚合基于两列的计算平均值?

我想编写一个 Django 查询来计算表中所有行的平均值。我的模型看起来像

class StatByDow(models.Model):
    total_score = models.DecimalField(default=0, max_digits=12, decimal_places=2)
    num_articles = models.IntegerField(default=0)
    day_of_week = IntegerField(
        null=True,
        validators=[
            MaxValueValidator(6),
            MinValueValidator(0)
        ]
    )
Run Code Online (Sandbox Code Playgroud)

我尝试像这样计算平均值

everything_avg = StatByDow.objects.all().aggregate(Avg(Func(F('total_score') / F('num_articles'))))
Run Code Online (Sandbox Code Playgroud)

但这会导致错误

  File "/Users/davea/Documents/workspace/mainsite_project/venv/lib/python3.7/site-packages/django/db/models/query.py", line 362, in aggregate
    raise TypeError("Complex aggregates require an alias")
TypeError: Complex aggregates require an alias
Run Code Online (Sandbox Code Playgroud)

计算平均值的正确方法是什么?

python django average django-orm

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

在python中随机播放字符串数据

我有一列有1000万个字符串。字符串中的字符需要以某种方式重新排列。

原始字串: AAA01188P001

乱序字符串: 188A1A0AP001

现在,我正在运行一个for循环,该循环将接收每个字符串并重新定位每个字母,但这需要几个小时才能完成。有没有更快的方法来达到这个结果?

这是for循环。

for i in range(0, len(OrderProduct)):
    s = list(OrderProduct['OrderProductId'][i])
    a = s[1]
    s[1] = s[7]
    s[7] = a 
    a = s[3]
    s[3] = s[6]
    s[6] = a 
    a = s[2]
    s[2] = s[3]
    s[3] = a 
    a = s[5]
    s[5] = s[0]
    s[0] = a 
    OrderProduct['OrderProductId'][i] = ''.join(s)
Run Code Online (Sandbox Code Playgroud)

python

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