标签: database-performance

sql INNER JOIN表变量ON VS. INNER JOIN(选择)ON

我想知道使用表变量是否比使用内连接(select)更多或更少的性能
示例:

DECLARE @tab TABLE(Id int)  
INSERT INTO @tab  
SELECT Id  
FROM SomeTable  
WHERE SomeDate = "10 DAYS AGO" 

SELECT *
FROM SomeOtherTable
INNER JOIN @tab t
ON SomeOtherTable.id = t.id  

--VERSUS--

SELECT *  
FROM SomeOtherTable  
INNER JOIN (SELECT Id FROM SomeTable WHERE SomeDate = "10 DAYS AGO") t  
ON SomeOtherTable.id = t.id
Run Code Online (Sandbox Code Playgroud)

对于大型查询,如果您必须多次进行相同的连接,则第一个更易于维护,但性能最高的是什么?

问候

sql sql-server performance database-performance

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

PHP或MySQL中的低优先级请求

我有一个拥有500万行的网站和数据库,它的工作就像一个魅力.但是,我每小时运行一次清理cronjob,将旧数据放入"日志"表并删除旧数据,此时服务器响应非常慢.是否有可能通过PHP或MySQL将该工作降低?

php mysql database-performance

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

如何将Apache Solr Search与Drupal 7站点集成?

任何人都可以给我很好的教程链接,这将对我有所帮助,所以我可以检查如何将Solr搜索与我的Drupal站点集成以获得良好的性能.

有哪些模块可用于Drupal 7.x版本的Apache Solr Search.哪个版本的Solr将支持Drupal 7.x. Apache Solr/Drupal 7.x要搜索的配置是什么?

提前致谢.

apache solr database-performance drupal-7

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

MySQL IN子句是否多次执行子查询?

鉴于MySQL中的这个SQL查询:

SELECT * FROM tableA WHERE tableA.id IN (SELECT id FROM tableB);
Run Code Online (Sandbox Code Playgroud)

MySQL是否SELECT id FROM tableB为每一行执行多次子查询tableA

有没有办法让sql更快,而不使用变量或存储过程?

为什么这通常比使用慢LEFT JOIN

mysql database-performance

3
推荐指数
2
解决办法
3139
查看次数

如何用PostgreSQL中的游标提高函数的性能?

我有两个嵌套游标的功能.外部光标从源获取客户的付款详细信息,并根据某些业务逻辑插入到目标中.内部光标接受每笔付款的付款细节,它一个接一个地发生.

付款表有大约125000行,大约335000行用于付款详细信息.所有这些行都将迁移到目标表.执行该功能需要两个多小时,数据库CPU使用率高达99%.
我正在使用PostgreSQL 9.2.

如何提高功能的性能?

我正在使用的代码:

CREATE OR REPLACE FUNCTION ccdb_dummy.o_payments1(a integer)
  RETURNS void AS
$BODY$
DECLARE
cursor_1  refcursor;
cursor_2  refcursor;
rowcount integer;
rowcount1 integer;
payment_no bigint;
query_1 character varying(250);
lc_cin_num bigint;
test character varying(50);
t_payments ccdb_stg.o_payments_stg%ROWTYPE;
t_payments_details ccdb_stg.o_payment_head_dtls_stg%ROWTYPE;

BEGIN
rowcount := 0;

open cursor_1 for select * from ccdb_stg.o_payments_stg WHERE section_code = a;

select count(1) into rowcount from ccdb_stg.o_payments_stg WHERE section_code = a;

for i IN 1..rowcount loop

fetch cursor_1 into t_payments;

payment_no= nextval('ccdb_stg.payments_seq');

select cin into lc_cin_num from …
Run Code Online (Sandbox Code Playgroud)

postgresql function plpgsql cursor database-performance

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

在varchar(50)列中插入值与varchar(2000)时的性能差异?

我正在考虑增加表格中某个列的大小,以便它可以容纳更长的值.但是这张桌子INSERT每天都经历沉重的s,我想知道增加尺寸是否会影响我的INSERT(和BULK INSERT)速度.

那么在a VARCHAR(50)和a VARCHAR(2000)列中插入值的执行时间是否存在差异?

database sql-server varchar database-performance

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

使用Entity Framework减少数据库调用

是否有可能在1个语句中写这个(只进行1个db调用?)并且仍能区分"成员不存在"和"成员确实存在但没有狗".

public IEnumerable<Dog> GetDogsOfMember(int id)
{
    if (dbContext.Members.Any(i => i.ID == id))
    {
        return dbContext.Dogs.Where(i => i.Member.ID == id);
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework database-performance

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

使用批量插入的peewee非常慢进入sqlite db

我正在尝试使用peewee对sqlite数据库进行大规模批量插入.我正在使用,atomic但性能仍然很糟糕.我在〜2500行的块中插入行,由于SQL_MAX_VARIABLE_NUMBER,我一次插入大约200行.这是代码:

with helper.db.atomic():
   for i in range(0,len(expression_samples),step):
      gtd.GeneExpressionRead.insert_many(expression_samples[i:i+step]).execute()
Run Code Online (Sandbox Code Playgroud)

列表expression_samples是一个字典列表,其中包含GeneExpressionRead模型的相应字段.我已经定时了这个循环,执行时需要2-8秒.我有数百万行要插入,现在我编写代码的方式可能需要2天才能完成.根据这篇文章,我设置了几个pragma以提高性能.对于我来说,这也没有真正改变任何表现.最后,根据peewee github页面上的这个测试,应该可以非常快地插入很多行(在0.3364秒内大约50,000个),但似乎作者使用原始的sql代码来获得这种性能.有没有人能够使用peewee方法做这么高性能的插入?

编辑:没有意识到peewee的github页面上的测试是针对MySQL插入的.可能适用于或不适用于这种情况.

python sqlite performance database-performance peewee

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

找出在SQL Azure中增加DTU的查询

我在我的应用程序中使用SQL Azure SQL Server.我的应用程序所在的数据库层一直运行到最近,avg DTU的使用受到控制.但是在高峰时段,DTU的峰值持续达到100%.升级到下一层是一个选项,但首先我想弄清楚哪个查询对此负责.这可以在Azure中找到,哪个查询使DTU跳转到100%?

sql-server performance azure database-performance azure-sql-database

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

为什么从utf8更改为utf8mb4会使我的数据库变慢?

我的PHP Web应用程序中的所有MySQL表都是具有utf8编码的MyISAM。由于可以在离线状态下通过配套应用生成记录,因此我的表键是随机生成的字母数字VARCHAR;这些字段使用utf8_bin编码设置为二进制,因此它们区分大小写。

我最近决定更改我所有文本字段的编码,以支持某些用户喜欢输入的表情符号。我继续将所有utf8字段更改为utf8mb4,包括密钥。我立即开始发现性能问题,其中对一个较大的表进行复杂的SELECT查询要花费一分钟多的时间,然后其他查询排队等待表锁。我将该表上的主键字段的编码改回了utf8,性能恢复了正常。几天后,我再次将该字段更改为utf8mb4,查询再次开始排队,然后将其更改为恢复正常性能。

因此,运行顺利:

`ID` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
Run Code Online (Sandbox Code Playgroud)

但这会导致问题:

`ID` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ''
Run Code Online (Sandbox Code Playgroud)

我读过的所有内容都说utf8和utf8mb4应该具有同等的性能,但是我发现我的情况有明显的不同。这有意义吗?

将关键字段保留在utf8并不是一个真正的问题,因为我预见在那里不会再使用简单的字母数字字符。但是我希望将所有字段都设置为相同的编码,只是为了保持一致和简化维护(不必记住将用户填充的字段设置为一种编码,而将关键字段设置为另一种编码)。

关于@MandyShaw的评论

当我使用Sequel Pro Mac应用程序处理数据库时,控制台会不断显示成对的SET NAMES 'utf8'SET NAMES 'utf8mb4'条目,因此这表明并非所有设置都正确。但是,这是我目前所拥有的:

MySQL [(none)]> SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary …
Run Code Online (Sandbox Code Playgroud)

php mysql unicode database-performance

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