问题标签 [database-performance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
68 浏览

database-design - DB design and performance

I'm currently in the process of designing a database. We have an existing system that was not designed very well and we are ironing out all of the small issues that are clearly visible, e.g. a varchar for a true/false flag instead of a bit.

What I want to know is, how do you know that you have got a sweet database design? Or is this a myth? I mean, the structure may look amazing on paper, but when some data is in there how will it perform.

Are tables that store "lookup" values faster than storing full descriptive text? e.g.

Error table

Error Description table

In this scenario, would creating a view be more beneficial than writing the SQL including the necessary join?

Sorry if I have posted this question in the wrong place.

0 投票
3 回答
243 浏览

sql-server-2005 - OR的表现?

可能重复:
SQL Server - 查询短路?
是否评估了 SQL WHERE 子句短路?

我对 T-SQL (SQL Server 2005) 中逻辑 OR 运算符的性能有疑问。

我已经搜索了一下,但我找不到任何关于这个主题的东西。

如果您有以下查询:

考虑到第一个条件为真,程序解释器是否会randomboolean为了节省性能而跳过重条件的评估?

由于 OR 语句中的一个值为真,因此无需评估第二个条件,因为我们已经知道满足第一个条件!

我知道它在 C# 中是这样工作的,但我想知道我是否也可以在 T-SQL 中指望它。

0 投票
3 回答
283 浏览

sql - 更高效的 SQL 查询

我正在构建一个“发现差异”的多人游戏。

游戏规格如下:

  1. 每场比赛最多可以有10名玩家。
  2. 用户不能两次看到同一张图片。
    (一张图片由四张图片组成,用户必须“找出它们之间的区别”)

我收集了数千甚至可能是数万张图片可供选择。我面临的问题是一种极其低效且不可扩展的方法,用于查找尚未有游戏玩家看过的图片。

在我的数据库中,我有usage table以下字段:

  1. 图片ID
  2. 用户身份

我目前的解决方案如下:

用户进入游戏,应用程序从数据库中选择一张未出现在该用户使用表中的图片,并且对于进入的每个用户,我运行相同的功能,仅添加同一游戏中其他用户已经看过的图片的值。

我担心一旦有数万张图片的数据库可供选择,并且使用表已经被以前的游戏填满,该功能只会花费太长时间而破坏游戏的流程。

这种方法的可扩展性不是很好,我期待相当稳定的流量,这意味着正在玩很多游戏。


有没有人对如何改进这个逻辑或更好的数据库结构有任何建议?

0 投票
2 回答
1236 浏览

mysql - 存储已删除用户数据的最佳方式?

我正在开发一个跟踪和处理工单/工单的应用程序。每个票证都通过一个外键链接到创建/拥有票证的用户,该外键级联 MySQL 中的任何更改。显然,如果用户出于某种原因删除了他们的帐户,我们仍然希望保留他们的票证和基本信息的记录。

想到的第一种方法是在用户表中设置一个列,表示他们是活动的还是非活动的,即删除与否。这样,当他们关闭/删除他们的帐户时,他们只是翻转这个值,然后就无法访问该应用程序。

我的另一个想法是在删除帐户时将用户记录移动到已删除的用户表中。这种方式可以将 users 表的性能保持在最佳状态,当它变大时可能会很重要,但会添加额外的查询来移动记录。

显然,这可能是偏好的一部分,但我对性能方面很感兴趣。本质上,问题是选择查询与插入查询相比如何,以及在什么时候通过添加插入查询(将记录移动到已删除的用户表)来提高整体性能?

0 投票
2 回答
1022 浏览

sql-server - 执行 SQL Server 远程查询的更好方法?

我有两个 SQL Server 实例,并且我从另一台服务器对一台服务器上的数据库进行了大量远程查询。像 server1.database1 上的这个查询一样:

我从其他人那里继承了这段代码,想知道是否有更好(更快)的方法来做到这一点?我的意思是,有没有一种方法可以在 server1.database1.dbo 上创建 server2.databse2.dbo.table2 的精确副本,该副本可以自我更新并实时保持最新状态?

Microsoft SQL Server 标准版(64 位)版本 10.0.4000.0

编辑:实际上,我现在在这种情况下所做的是,如果可以的话,我使用开放查询和 with(nolock) 来获取我需要的最小数据集,并将其放入临时表中。我将“id”列设置为唯一的聚集索引,以便它可以快速加入我在服务器 1 上加入的任何内容。

0 投票
4 回答
231 浏览

sql - Sql Server 查询需要时间

我的存储过程面临一些问题。

我有 1 个用于堆栈条形图的存储过程,显示一个月的数据。

早些时候在我的本地服务器上花费了 40 多秒,所以我做了一些更改,现在需要 4 秒。当我在实时服务器上运行时,相同的查询需要 40 多秒。

记录的数量与我的本地服务器中的相同。

谁能告诉我应该怎么做才能让它在我的实时服务器上更快?

0 投票
3 回答
500 浏览

mysql - MySQL 子查询性能 5.0 到 5.1(及更高版本)

作为 PHP 应用程序的一部分,我遇到了以下查询。查询在 mysql 5.0 中运行很快(不到 1 秒),但在 mysql 5.1 及更高版本中大约需要 7 分钟才能完成。

返回的结果只有 3 行,但是当我strace在 5.1 服务器上的 mysqld 进程上运行此查询时,我可以看到它连续从Event表中读取数据几分钟(一个只有 7000 行、200 字节的表每行)——大概是多次重读。

所以问题是,我在这里遇到了什么不同,我该如何修改东西(查询或更好的一些 MySQL 设置),以便它在 5.1 下运行的速度与在 5.0 下运行的速度一样快。


参考数据

责备的查询

引用的表具有以下行数

部分:60
事件:7000 事件_部分
:7000事件
_网站:15000

下面是EXPLAIN来自 5.0(快)和 5.1(慢)服务器的上述查询。
剪裁空间;希望我没有剪掉任何有用的东西。

慢 (5.1)

快速 (5.0)

0 投票
3 回答
403 浏览

php - facebook 如何保持良好的即时自动建议速度

Facebook 具有在各种情况下显示即时自动建议结果的功能,例如:搜索、消息发送等。

我认为我将功能称为“自动建议”是正确的。

如果用户有 1000 个朋友,并且他/她希望向朋友发送消息,那么 facebook 会在输入几个字符时建议他/她的名字。

我的问题是:在从数据库中提取数据以寻找朋友(或任何此类情况)然后处理它时,FB 使用哪种技术来保持自动建议的速度?

它是缓存变量还是什么?我想详细了解,因为我正计划建立一个社交网站。我的脚本语言是 php

0 投票
1 回答
236 浏览

python - 用python在SQLite数据库中重复写入数据

我想将 SQLite 用于我的 GUI Python 应用程序,但我必须每 500 毫秒更新一次数据库,而不会影响程序的性能。

我正在使用PyQt4,所以我考虑过使用QThread,但它似乎很难处理,所以在真正尝试理解它之前我想知道它是否是最好的方法。

我的问题是:QThread 是最好的方法还是有其他方法?</p>

0 投票
1 回答
805 浏览

mysql - 每小时必须执行数十万次的慢速 mysql 查询

我的 mysql 数据库有一个包含数十万行的表。每行(除其他数据外)都有一个用户名和一个时间戳。

我需要为给定用户检索具有最新时间戳的记录。

当前的蛮力查询是:

该表有一个索引 onuser_name和 on datetime_sent

我怎样才能最好地改进这个查询?我必须一次运行数千个这样的查询。每个查询似乎需要 1 到 4 毫秒,我怀疑有一种更有效的方法可以实现相同的结果。