1)
select * from student_tbl A ,result_tbl B where
A.student_name = B.student_name and
A.student_name = "xyz" ;
Run Code Online (Sandbox Code Playgroud)
2)
select * from student_tbl A ,result_tbl B where
A.student_name = "xyz" and
A.student_name = B.student_name ;
Run Code Online (Sandbox Code Playgroud)
我知道这些查询的结果是一样的.有任何性能差异吗?如果是这样,请解释原因.
我正在寻找一个简单的查询来说明数据库性能
我们已经创建了一个工具来查找客户端网络/服务器/软件性能,为我们创建一个基线,让我们说他们的服务器或客户端实际上功率不足或者我们的软件在某些情况下表现不佳.
我们为什么这样做?
在我们的一个客户,我们的软件表现得非常慢,他们责备我们.在寻找可能的软件缺陷之后,我们发现问题实际上是他们的网络速度,它只是非常慢.(网络流量通过100英里以外的VPN路由)
我需要什么
我正在寻找一个"简单"的查询来设置Microsoft SQL Server数据库的基准性能.
最好是一个查询,可以说数据库是真的慢/快还是只是工作正常.
我创建了一个简单的查询:
select top 50000 * from BigTable
where YEAR(startdate) = 2011 or YEAR(startdate) = 2010
order by table.startdate desc
Run Code Online (Sandbox Code Playgroud)
这里的BigTable实际上是我们的软件会经常查询以进行一些复杂的更新计算的东西.
调用此查询(100次)并从客户端计时它给我们一个体面的服务器性能估计.但我宁愿执行一个更加面向计算的查询,其中包含一些复杂的连接,实际上只是简单的选择,而不是服务器性能.
我使用Mysql 5.5 .. + INNODB和Windows Server。
案例(先简单然后再案例):
我有2个表1GB,名称new_car和car表1GB。
我每隔10小时car用new_car表格替换表格,而不是手动(按代码自动)-快速完成(实际网站数据)很重要。
我读了(说在innodb中删除了它的问题):http : //www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/
解决方案1:
DROP TABLE car;
RENAME TABLE new_car TO car;
Run Code Online (Sandbox Code Playgroud)
解决方案2(最后放置-可能不会阻止表访问在放置期间发生的访问):
RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)
解决方案3(截断快速删除表并创建空表,然后在执行删除操作后应该很快):
TRUNCATE TABLE car;
DROP TABLE car;
RENAME TABLE new_car TO car;
Run Code Online (Sandbox Code Playgroud)
解决方案4:
RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
TRUNCATE TABLE temp_car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)
哪种解决方案是最好的,为什么或请写其他更好的解决方案?
谢谢
我只是经历了一个场景,我根本没有得到我的问题的线索.
我有一个名为name的表(列名和时间).该表每隔一分钟插入许多行.并且这些插入的记录将在特定时间间隔内删除.所以,最后我停止插入数据并删除了表中的所有行.
我的数据库版本细节
impss=# SELECT version();
version
----------------------------------------------------------------------------------------------
PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
(1 row)
Run Code Online (Sandbox Code Playgroud)
但是当我发出查询以查找表的大小时,我仍然得到一些大小.
impss=# SELECT pg_size_pretty( pg_total_relation_size('names')) ;
pg_size_pretty
----------------
1504 kB
(1 row)
Run Code Online (Sandbox Code Playgroud)
第一个问题为什么它仍然显示一些大小虽然我删除了表中的所有记录.
要查找上次autovacuum何时完成,我已发出以下查询:
当前时间是
impss=# select now();
now
----------------------------------
2012-11-08 20:21:10.550434+05:30
(1 row)
impss=# SELECT last_autovacuum from pg_stat_user_tables where relname='names';
last_autovacuum
----------------------------------
2012-11-08 17:51:31.995618+05:30
Run Code Online (Sandbox Code Playgroud)
第二个问题:为什么在此之后没有执行autovacuum进程,尽管我的数据库不是繁忙的,我已经停止了对该表的所有事务.
所以,请告诉我是否必须进行任何特定配置才能进行频繁的真空处理,以便在记录被删除后我可以取回所有空间.
假设我有一张表(让我们称之为BigTable),每天可以体验5,000,000个INSERTS(可能只有SELECT).插入的每行约为50kb.
这些每日INSERT分为5个客户端(该表有一个FK调用ClientID).无需跨多个客户端选择或加入数据.
随着这个表的增长,我担心数据库性能,所以我提出了两个解决方案.
解决方案1:
BigTable由ClientID实质上,这意味着他们自己的存储设备上的以下分区:
BigTable)BigTable(每天5,000,000行/ 5个客户x 30天= 30,000,000行)BigTable(30,000,000行)BigTable(30,000,000行)BigTable(30,000,000行)BigTable(30,000,000行)BigTable存档BigTable存档BigTable存档BigTable存档BigTable存档归档表中的行数将为(5,000,000)x(以天为单位的DB年龄) - (30,000,000).这仍然是一个巨大的表,但只会用于绘制奇怪的报告.
SQL Server将托管在14GB,8core Azure VM上.
解决方案2:
另一种选择是为每个客户端托管单独的数据库.这意味着每个人都拥有自己专用的SQL Server机器.归档数据仍将进行分区.
由于数据的物理分离,此选项不是最佳选项.必须管理多个数据库的更新可能非常有问题.为每个客户端建立单独的数据库连接也是开发人员的考虑因素.
任何人都可以就这些选择提出建议吗?
sql-server database-design azure database-performance database-partitioning
我问你一些建议.我有一个网站,我有视频,用户可以给他们竖起大拇指和拇指向下.他们保存在一张桌子里.目前我有三个SQL查询来获取竖起大拇指的数量,拇指向下的数量以及登录用户给出的内容(如果他这样做).
而现在我正在考虑提高性能,但我不知道什么是更好的,因为我想保持查询的数量.
方法1)保持这三个查询:
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1
SELECT * FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `uid` = '1' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
方法2)使用子查询进行一次查询(类似的东西(它在这里不起作用)):
SELECT *, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1) as thumbsups, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' …Run Code Online (Sandbox Code Playgroud) 我在更新表时遇到问题.我正在运行以下查询:
UPDATE Table1 SEt entrena = c.Count
FROM Table1 AS p INNER JOIN (
SELECT e.EmplID, COUNT(e.EmplID ) as Count
FROM Table2 AS e WHERE e.Start >= @Start AND e.Start <=@End
GROUP BY e.EmplID ) AS c ON p.EmplID = c.EmplID
WHERE P.Date = '2050-12-31'
Run Code Online (Sandbox Code Playgroud)
Table1有12000行,连接中的select只有51行,但更新大约需要2分钟,但是如果我删除where clase p.date = '2050-12-31',则更新只需不到一秒钟.我无法弄清楚如何解决它.我正在使用SQL Server 2008.
两个表都没有索引.
在MongoDB中批量插入文档有两种方法:
db.collection.insert,或Bulk.insert- 自v2.6起可用哪一个更高效?我假设后者在单个批量写操作块中与其他写操作结合使用时更方便,因此第一个更高效.但有没有人做过任何测试或有这方面的逻辑或经验证据?
performance bulkinsert performance-testing mongodb database-performance
我在Windows Server 2012下的SQL Server 2012中运行一些存储过程,这些存储过程位于具有32 GB RAM和8个CPU内核的专用服务器中.CPU使用率始终低于10%,RAM使用率为80%,因为SQL Server分配了20 GB(32 GB).
有些存储过程在某些日子和其他日子需要4小时,几乎相同的数据需要7或8小时.
我使用限制性最小的隔离级别,所以我认为这不应该是一个锁定问题.数据库大小约为100 GB,最大的表有大约500万条记录.
这些进程具有批量插入,更新和删除(在某些情况下,我可以使用truncate来避免生成日志并节省一些时间).我在一个表中进行了一些全文搜索查询.
我完全控制了服务器,所以我可以更改任何配置参数.
我有几个问题:
编辑:我检查了日志,我发现了这个:
2015年3月18日11:09:25,spid26s,未知,SQL Server遇到82次发生的I/O请求需要超过15秒才能完成文件[C:\ Program Files\Microsoft SQL Server\MSSQL11数据库[tempdb](2)中的.HLSQLSERVER\MSSQL\DATA\templog.ldf].OS文件句柄为0x0000000000000BF8.最新的长I/O的偏移量为:0x00000001fe4000
sql-server server-configuration long-running-processes database-performance sql-server-2012
我遇到一种情况,即Oracle为给定查询创建多个执行计划。大多数情况下,它会选择性能良好的特定产品。但是,有时它选择一个包含笛卡尔连接的连接,这是非常错误的。如果我们删除笛卡尔联接计划并使用其他计划之一运行查询,则该查询执行良好,这向我暗示了基础数据确实不需要笛卡尔。
我们曾尝试收集统计数据并摆正直方图,但最终,笛卡尔联接执行计划似乎又回来了,并被间歇性地使用(有时需要数周或数月)。
在Oracle中是否可以禁用特定的执行计划?我们不能只是删除它,因为它似乎又回来了,但是将其保留并禁用它应该可以解决,但是我真的不知道该怎么做或是否有可能。
sql ×4
performance ×3
database ×2
mysql ×2
sql-server ×2
azure ×1
bulkinsert ×1
mongodb ×1
oracle ×1
php ×1
postgresql ×1
t-sql ×1