标签: database-performance

是"where(ParamID = @ParamID)OR(@ParamID = -1)"sql选择的一个好习惯

我曾经写过像sql一样的语句

select * from teacher where (TeacherID = @TeacherID) OR (@TeacherID = -1)
Run Code Online (Sandbox Code Playgroud)

阅读更多

并传递@TeacherID值= -1以选择所有教师

现在我担心你能告诉我的表现是一个好的练习还是坏的一个?

非常感谢

sql sql-server performance filter database-performance

10
推荐指数
2
解决办法
306
查看次数

Mysql vs Oracle XE vs Postgresql.可扩展性和性能,选择哪个?

我知道这是非常广泛的,所以让我给你一个设置,并具体说明我的重点.

设置:

我正在使用MYSQL使用现有的PHP应用程序.几乎所有表都使用MYISAM引擎,并且大部分都包含数百万行.其中一个最大的表使用EAV设计,这是必要但对性能的影响.该应用程序是为了最好地利用MYSQL缓存而编写的.它每页加载请求相当数量的请求(部分原因是这样),并且复杂到足以在每次页面加载时通过整个数据库的大多数表.

优点:

  • 免费
  • MYISAM表支持对应用程序很重要的全文索引

缺点:

  • 通过设置方式,MYSQL仅限于一个CPU用于整个应用程序.如果运行一个非常苛刻的查询(或服务器负载很大),它将排队所有其他人使站点无响应
  • MYSQL缓存和缺少"WITH"或"INTERSECT"意味着我们必须打破查询以更好地使用缓存.因此乘以查询的数量.例如,在具有数百万行的多个表上使用子查询(即使具有良好的索引)对于当前/上调负载而言是一个大问题,并且约束在上面指出(CPU使用率)

感觉需要在上升年度扩大规模,但不一定准备立即支付许可费用,我一直在考虑重写应用程序和切换数据库.

正在考虑的三个选项是继续使用mysql但使用INNODB引擎,这样我们可以利用更多的CPU功率.当我们需要向上扩展4Gb数据库,1Gb RAM或1 CPU限制(我们还没有达到目标)时,适应Oracle XE并获得许可证.或者适应PostgreSQL

所以问题是:

  • 在这三种情况下,丢失全文索引会如何影响性能(oracle或postgreSQL是否具有等效性?)
  • oracle和postgreSQL如何在子查询,WITH和UNION/INTERSECT语句上利用缓存
  • Oracle和PostgreSQL如何利用多核/ CPU功能(如果/当我们获得oracle许可证时)

我认为这已经很多了,所以我会在这里停下来.如果有赞美的链接,我不介意简单/不完整的答案.

如果您需要更多信息,请告诉我

在此先感谢各位,感谢您的帮助.

mysql oracle postgresql database-performance

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

从性能角度来看,将MySQL临时表用于高度使用的网站功能的效率如何?

我正在尝试为网站编写搜索功能,我已经决定使用MySQL临时表来处理数据输入的方法,通过以下查询:

CREATE TEMPORARY TABLE `patternmatch`
  (`pattern` VARCHAR(".strlen($queryLengthHere)."))

INSERT INTO `patternmatch` VALUES ".$someValues
Run Code Online (Sandbox Code Playgroud)

$someValues具有布局的一组数据在哪里('some', 'search', 'query')- 或者基本上是用户搜索的数据.然后我images根据表中的数据搜索我的主表,patternmatch如下所示:

SELECT images.* FROM images JOIN patternmatch ON (images.name LIKE patternmatch.pattern)
Run Code Online (Sandbox Code Playgroud)

然后我根据每个结果与输入匹配的程度应用启发式或评分系统,并通过启发式等显示结果.

我想知道创建临时表需要多少开销?我知道它们只存在于会话中,并在会话结束后立即被删除,但如果我每秒有数十万次搜索,我会遇到什么样的性能问题?有没有更好的方法来实现搜索功能?

php mysql performance temp-tables database-performance

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

序列缓存和性能

我可以看到DBA团队建议在性能优化时将序列缓存设置为更高的值.要将值从20增加到1000或5000. oracle docs表示缓存值,

Specify how many values of the sequence the database preallocates and keeps in memory for faster access.

在AWR报告的某处,我可以看到,

select SEQ_MY_SEQU_EMP_ID.nextval from dual

如果我增加缓存值,可以看到任何性能改进SEQ_MY_SEQU_EMP_ID.

我的问题是:

序列缓存是否在性能方面发挥了重要作用?如果是这样,如何知道序列所需的足够缓存值是多少.

oracle database-performance

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

一起执行多个功能而不会降低性能

我有这个过程,必须使用pl/pgsql进行一系列查询:

--process:
SELECT function1();
SELECT function2();
SELECT function3();
SELECT function4();
Run Code Online (Sandbox Code Playgroud)

为了能够在一次调用中执行所有操作,我创建了一个过程函数:

CREATE OR REPLACE FUNCTION process()
  RETURNS text AS
$BODY$
BEGIN
    PERFORM function1();
    PERFORM function2();
    PERFORM function3();
    PERFORM function4();
    RETURN 'process ended';
END;
$BODY$
  LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

问题是,当我总结每个函数自身所用的时间时,总计为200秒,而函数所process()用的时间超过一个小时!

也许这是一个内存问题,但我不知道postgresql.conf应该改变哪种配置.

DB在Debian 8中的PostgreSQL 9.4上运行.

postgresql plpgsql database-performance query-performance postgresql-performance

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

AsList()比使用返回IEnumerable的IDbConnection.Query()的ToList()更好吗?

我从Marc Gravell(@MarcGravell)那里读到了这个答案:https://stackoverflow.com/a/47790712/5779732

最后一行说:

作为代码的次要优化:首选AsList()到ToList()以避免创建副本.

该陈述是关于QueryMultiple()哪些回报GridReader.

在我的理解中,System.Linq提供了一种扩展方法IEnumerable.ToList().以下是从微软ToList().

ToList(IEnumerable)方法强制立即进行查询评估并返回包含查询结果的List.您可以将此方法附加到查询中,以获取查询结果的缓存副本.

IDbConnection.Query()将永远返回IEnumerablenull.在调用代码时可以轻松完成空检查.那么有什么区别AsList呢?

如果我的理解是正确的,AsList将始终在内部调用ToList哪个将创建副本.

考虑到这一点,是AsList()不是更好ToList()IDbConnection.Query(),它返回IEnumerable?如是; 为什么?

AsList()在这种情况下,内部是什么使它成为更好的选择?

c# linq performance database-performance dapper

10
推荐指数
2
解决办法
3543
查看次数

postgres外键是否意味着索引?

我有一个postgres表(让我们调用此表Events)与另一个表的复合外键(让我们调用此表Logs).Events表如下所示:

CREATE TABLE Events (
   ColPrimary UUID,
   ColA VARCHAR(50),
   ColB VARCHAR(50),
   ColC VARCHAR(50),
   PRIMARY KEY (ColPrimary),
   FOREIGN KEY (ColA, ColB, ColC) REFERENCES Logs(ColA, ColB, ColC)
);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我知道我可以通过主键有效地搜索事件,并加入到日志.

我感兴趣的是这个外键是否在Events表上创建了一个索引,即使没有加入也可以使用它.例如,以下查询是否会受益于FK?

SELECT * FROM Events
WHERE ColA='foo' AND ColB='bar'
Run Code Online (Sandbox Code Playgroud)

注意:我已经针对一个非常类似的情况运行了POSTGRES EXPLAIN,并且看到该查询将导致全表扫描.我不确定这是因为FK对此查询没有帮助,或者我的数据大小很小并且扫描在我当前的规模上更有效.

postgresql database-performance

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

PostgreSQL:为什么这个简单的查询不使用索引?

我有一个带有列c的表t,它是一个int并且在其上有一个btree索引.

为什么以下查询不使用此索引?

explain select c from t group by c;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

HashAggregate  (cost=1005817.55..1005817.71 rows=16 width=4)
  ->  Seq Scan on t  (cost=0.00..946059.84 rows=23903084 width=4)
Run Code Online (Sandbox Code Playgroud)

我对索引的理解是有限的,但我认为这些查询是索引的目的.

database postgresql relational-database database-performance

9
推荐指数
2
解决办法
3252
查看次数

追随者 - mongodb数据库设计

所以我正在使用mongodb,我不确定我是否已经为我正在尝试做的事情获得了正确/最佳的数据库集合设计.

可以有许多项目,用户可以创建包含这些项目的新组.任何用户都可以关注任何组!

在此输入图像描述

我没有将关注者和项目添加到组集合中,因为组中可能有5个项目,或者可能有10000个(对于关注者来说相同),并且从研究中我认为您不应该使用未绑定的数组(其中由于尺寸扩大而必须移动文档时由于性能问题而导致限制未知.(在遇到性能问题之前,是否有建议的阵列长度最大值?)

我认为使用以下设计时,真正的性能问题可能是当我想要获取用户为特定项目关注的所有组(基于user_id和item_id)时,因为我必须找到所有组用户正在关注,并从中查找具有group_id $ in和项ID的所有item_group.(但我实际上看不到任何其他方式这样做)

Follower
.find({ user_id: "54c93d61596b62c316134d2e" })
.exec(function (err, following) {
  if (err) {throw err;};

  var groups = [];

  for(var i = 0; i<following.length; i++) {
    groups.push(following[i].group_id)
  }

  item_groups.find({
  'group_id': { $in: groups },
  'item_id': '54ca9a2a6508ff7c9ecd7810'
  })
  .exec(function (err, groups) {
    if (err) {throw err;};

    res.json(groups);

  });

})
Run Code Online (Sandbox Code Playgroud)

是否有更好的DB模式来处理这种类型的设置?

更新:在下面的评论中添加了示例用例.

任何帮助/建议将非常感谢.

非常感谢,Mac

javascript database-design mongodb database-performance database-schema

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

枚举与字符串/整数枚举

我注意到像 Postgres 这样的一些数据库添加了,Enum但问题是,

什么时候integer/string based enum会成为性能问题?

下面这个回答关于Postgresql enum的差异有哪些优点和缺点?

因为当您使用 Rails 或在本例中使用EctoElixir 语言时,存在一定程度的抽象,因此列出的两个优点之一根本不会成为问题,因此只需要performance关注。

因此,当该优势确实很重要时,您就放弃了其中列出的劣势

database postgresql enums database-performance

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