问题标签 [database-optimization]

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 投票
8 回答
18001 浏览

sql - 提高 Sql Delete 的性能

我们有一个查询来根据 id 字段(主键)从表中删除一些行。这是一个非常简单的查询:

问题是 id 的数量可能很大(例如 70k),因此查询需要很长时间。有没有办法优化这个?(我们正在使用 sybase - 如果这很重要)。

0 投票
6 回答
355 浏览

sql-server - 如果一个表有很多(20+)外键约束,有什么缺点吗?

假设我有一个表,其中有许多字段链接到其他“值表”中的值。自然地,我对每个和每个都声明外键约束以强制完整性。

如果我最终得到 20-30 范围内的此类字段的数量怎么办?它会以某种方式“减慢”表操作吗?

添加:值表预计只有很少的记录,通常是 5-10 或其他东西。数据库是 SQL Server 2008。

0 投票
3 回答
672 浏览

sql - 微博启动数据库

我会做微博网络服务(对于学校,所以不要因为缺乏新想法而抨击我)并且我担心数据库可能经常超载(用户可能会关注其他用户甚至标记,所以我认为这SELECT会很重 - 检查包含所有观察标签和用户的 20 条最新消息)。

我的想法是创建另一个表,并仅在其中存储 statusID 和 userID(谁应该接收消息)。危险在于,如果某个标签或用户有很多关注者,那么该状态 ID 将会有很多记录。那么,这是个好主意吗?或者也许更好地使用 M2M 关系?(一种状态 -> 许多接收者)

0 投票
2 回答
951 浏览

c# - 我们如何优化此 linq to entity 查询以减少响应时间?

我们有这么长的查询,取书和排序耗费时间,经过性能测试,发现包含该查询的页面的响应时间超过10秒,我们需要设法解决这个问题并减少响应时间。

有人有什么建议吗?

0 投票
5 回答
1206 浏览

mysql - 我可以在一个表列中存储大量数据(<=4GB)。但这是个好主意吗?

长话短说,我正在处理的应用程序的一部分需要在数据库中存储大量数据,以供稍后应用程序的另一部分获取。通常这将小于 2000 行,但偶尔会超过 300,000 行。数据需要临时存储,之后可以删除。

我一直在玩各种想法,今天想到了一件事。该LONGTEXT数据类型最多可存储 2^32 个字节,相当于 4 GB。现在,有很多东西要塞进一个表格行。请注意,数据最多可能不会超过60-80 MB。但我的问题是,实际上这样做是个好主意吗?

我目前正在使用的两种解决方案是这样的:

  • 将所有数据作为单独的行插入到“临时”表中,完成后将被截断。
  • 将所有数据作为序列化字符串插入到LONGTEXT完成后将被删除的行中的列中。

纯粹从性能的角度来看,将数据存储为可能超过 300,000 个单独的行或存储为 60 MBLONGTEXT条目会更好吗?

如果是清洗,我可能会选择该LONGTEXT选项,因为它会使获取数据的应用程序部分更易于编写。它还将与另一部分更好地结合,这将提高应用程序的整体性能。

我将不胜感激对此的任何想法。

0 投票
4 回答
170 浏览

language-agnostic - 定期性能调整和维护

您多久进行一次定期维护,例如对应用程序进行压力测试和/或为应用程序调整数据库索引?

例如,您是否每周、每六个月或仅在输入大量数据后调整(碎片整理、重组或重建)您的数据库索引,并且您是否在每个主要或次要构建之后对您的应用程序进行压力测试,每周,每年,绝不?

0 投票
2 回答
298 浏览

mysql - 在使用连接时,我们如何极大地优化我们的 MySQL 数据库(或替换它)?

这是我第一次接近一个非常高容量的情况。这是一个基于 MySQL 的广告服务器。但是,使用的查询包含很多 JOIN 并且通常很。(这是 Rails ActiveRecord,顺便说一句)

sel = Ads.find(:all, :select => '*', :joins => "在 ads.campaign_id =campaign.id 上加入活动campaign.id LEFT JOIN 关键字 ON keywords.campaign_id = campaign.id", :conditions => [flashstr + "keywords.word = ? AND ads.format = ? AND campaign.cenabled = 1 AND (countries.country IS NULL OR countries .country = ?) AND ads.enabled = 1 AND campaign.dailyenabled = 1 AND users.uenabled = 1", kw, format, viewer['country'][0]], :order => order, :limit =>限制)

我的问题:

  1. 有没有像 MySQL 这样支持 JOIN 但速度更快的替代数据库?(我知道有 Postgre,仍在评估它。)

  2. 否则,启动 MySQL 实例,将本地数据库加载到内存中并每 5 分钟重新加载一次会有帮助吗?

  3. 否则,有什么方法可以将整个操作切换到 Redis 或 Cassandra,并以某种方式更改 JOIN 行为以匹配 NoSQL 的(不可加入)性质?

谢谢!


编辑:这里有更多细节:

使用扁平化选择(上面截断)的完整执行 SQL:

选择活动.id、活动.guid、活动.user_id、活动.dailylimit、活动.impressions、活动.cenabled、活动.dayspent、活动.dailyenabled、活动.fr、ads.id、ads.guid、ads.user_id、广告.campaign_id, ads.format, ads.enabled, ads.datafile, ads.data1, ads.data2, ads.originalfilename, ads.aid, ads.impressions, countries.id, countries.guid, countries.campaign_id, countries.country ,keywords.id,keywords.campaign_id,keywords.word,keywords.bid FROMads在 ads.campaign_id =campaign.id 上加入广告系列 在campaigns.user_id = users.id 上加入用户 在国家/地区.campaign_id =campaigns.id 上左加入国家/地区在keywords.campaign_id =campaigns.id 上加入关键字' AND ads.format = 10 AND campaign.cenabled = 1 AND (countries.country IS NULL OR countries.country = 82) AND ads.enabled = 1 AND campaign.dailyenabled = 1 AND users.uenabled = 1 AND ads.datafile ! = '') ORDER BY keywords.bid DESC LIMIT 1,1

解释/执行计划:

(这是在一个开发数据库上,它的行数几乎没有生产版本那么多。)

定义的指数:

0 投票
1 回答
7277 浏览

sql-server - SQL Server 执行时间代表什么?

我有一个查询,我在两个等效数据库上运行,但托管在单独的 MS SQL 2005 服务器上。我想测量两台服务器上查询的时间,因此尝试了以下操作:

并得到以下结果:

我的问题是,SQL Server 执行时间是什么意思?是仅在数据库中执行查询,还是执行查询,包括将数据传输回运行 SQL Server Management Studio 的客户端?

提前谢谢!

0 投票
4 回答
245 浏览

sql - To what degree can effective indexing overcome performance issues with VERY large tables?

So, it seems to me like a query on a table with 10k records and a query on a table with 10mil records are almost equally fast if they are both fetching roughly the same number of records and making good use of simple indexes(auto increment, record id type indexed field).

My question is, will this extend to a table with close to 4 billion records if it is indexed properly and the database is set up in such a way that queries always use those indexes effectively?

Also, I know that inserting new records in to a very large indexed table can be very slow because all the indexes have to be recalculated, if I add new records only to the end of the table can I avoid that slow down, or will that not work because the index is a binary tree and a large chunk of the tree will still have to be recalculated?

Finally, I looked around a bit for a FAQs/caveats about working with very large tables, but couldn't really find one, so if anyone knows of something like that, that link would be appreciated.

0 投票
1 回答
1353 浏览

mysql - MySQL:在 ORDER BY 查询中加入并使用索引

我有一个类似于 stackoverflow 的问答功能的系统。主要区别在于每个问题都有一个到期日期时间:

我想显示一个问题以及按分数排序的前 N ​​个未过期答案。我在想这样的事情:

几个问题:

1)上面的查询是做我想做的最有效的方法吗?它与显式使用 JOIN 有何不同,例如:

2)如何让我的查询使用索引?我正在考虑将此索引添加到 TABLE 答案中:

上述索引是否适用于我的查询?这似乎不正确,因为 expire_datetime 正在上升,而我需要 score 下降。我可以在这里做什么?