我想知道是否有一种方法可以执行这种查询(可选的where子句),而不会对sql施加这样的负载。
SELECT *
FROM TABLE
WHERE
Name = IsNull(@Name,Name)
AND (
(@MinAge IS NULL AND @MaxAge IS NULL)
OR
(@MinAge IS NOT NULL AND @MaxAge IS NOT NULL AND Age BETWEEN @MinAge AND @MaxAge)
)
我知道我可以使用EXEC将其作为变量执行,并在需要的地方包含
假设我有两个表需要连接。有两种方法可以编写sql:
select * from taba a join tabb b on a.id =b.id where ...
select * from taba a, tabb b where a.id = b.id and ...
哪一个具有更好的性能,或者这只是不同SQL标准的语法问题,而不管性能如何?
我已经开发了一种方法来从文件中读取复杂或冗长的查询,而不是直接在代码中读取,以避免混乱,并提供对查询本身的快速引用。然后我被告知这不是首选,因为脚本必须从文件中读取,因此速度较慢。下面是我的例子:
文件: sql/get_code_matches.sql
/**
* returns list of new codes
* from old code entry
* @param source - string oldcode
* @param startdate - YYYY-MM-DD format only
* @return mixed multi-dimensional array o
我对where条款的订购有问题。
从其他问题中可以看出,where子句的顺序不会影响sql查询的性能,但是随着顺序的改变,我的查询性能也会发生变化。
select sql_no_cache idx
from rr
where (timestamp >= '2016-11-28' and timestamp <= '2016-12-28')
and ((select name from xx where midx=rr.midx) like 'test'
比
select sql_no_cache idx
from rr
where
在我参加的一次面试中,我被要求优化SQL查询。表PRODUCTS结构如下所示:
PRODUCT_NAME -它有大约200个重复的唯一值
状态-它有大约20个重复的唯一值。
国家-它有大约5个独特的值重复。
该表包含100万行。我收到了下面的SQL语句,并被要求完成它。SQL将获取特定状态的所有产品。
SELECT _______
FROM PRODUCTS
WHERE STATE = 'CALIFORNIA'
我的答案如下:
SELECT PRODUCT_NAME, STATE, COUNTRY
FROM PRODUCTS
WHERE STATE
在查询数据库的时候,由于数据量大,我要做分页,然后首先获取总的条数,但是使用sql语句SELECT COUNT(*) as total from 表 WHERE addtime between 1164038401 and 1511235339;这条sql等于遍历了全表,数据有一百万条,id为主键索引,addtime为普通索引。现在问题是一使用这条语句内存使用量就从一开始的30%多直接上升到90%多,怎么解决这个内存问题?
我现在只是查询个数,但是分页的时候会查询有条件的大量数据,对于内存过大,有什么好的解决办法?比如sql不使用缓存,修改配置文件等等。
在一个包含多个order by子句的SQL查询中,它们真的都是在执行过程中运行的吗?
示例:
select * from my_table
order by field5, field3, field2
如果执行'order by‘field5和field3后的列表只有一个field5和field3的组合,那么在执行field2查询的过程中'order by SQL’还在运行吗?或者,在我的例子中,SQL Server是否足够聪明,能够看到这一点并跳过最后一步?
我之所以问这个问题,是因为我正在编写一个存储过程,其中我有一个列表,大部分时间只需要按to或3列排序,但在某些情况下
到目前为止,我只学习了php和sql的基础知识,这里需要一些指导。我有以下代码来更新sql表中一行中的数据--这很好:
<?php
$hostname = "localhost";//host name
$dbname = "dpuqsevb_tnysx";//database name
$username = "dpuqsevb_user";//username you use to login to php my admin
$password = "password";//password you use to lo
我已经为我的性能工作台标记练习设置了server 2005,并且在另一个服务器上放置了相同的数据库,该服务器具有sql server 2008,并且在硬件配置方面完全复制。在这两台服务器中,Sql服务器内存分配也是相同的。但我的基准测试结果在2008年比2005年还要糟糕。有人能帮我找出sql server 2008性能下降的原因吗?什么是我需要注意的事情,或参数设置,以获得更好的或相同的结果集。
我正在开发sql server。
在我的查询中,where条件如下所示:
WHERE
([status] IN (3,4) AND locid = 6 AND dtime >= getdate()-50)
OR
([status] = 5 AND DATEDIFF(n, CAST(DelDate AS DATETIME), GETDATE()) <= 3
AND locid = 6 AND dtime >= getdate()-50)
ORDER BY
paydate
代替这里的条
我有以下两个问题:
SELECT SQL_NO_CACHE DISTINCT(type) FROM actions LIMIT 0, 30;
和
SELECT SQL_NO_CACHE type FROM actions GROUP BY type LIMIT 0, 30;
如果我不使用限制子句,那么执行时间是相等的。另一方面,在我的例子中,第一个查询几乎需要0.8秒,而第二个查询需要0.12秒。
使用EXPLAIN,唯一的区别似乎是第一个查询使用临时表,而第二个查询不使用临时表。
此时,我对这两个查询的不同行为感到非常惊讶.你能就这个问题提供一些启示吗?
我目前正在使用MYSQL 5.5.3
我有以下代码来获取当前时间戳,并以分钟为单位计算上一个时间戳与当前时间戳的差值。我想知道这是否可以进一步优化生产。
public static Timestamp getTimestamp() {
java.util.Date date= new java.util.Date();
long time = date.getTime();
java.sql.Timestamp ts = new java.sql.Timestamp(time);
return ts;
}
public static long getLastTim
如果不变量恶化了代码的可读性,我是否应该考虑将不变量移出循环范围?
让我们来看看一个简单的例子:
for (var i = 0; i < collection.Count; i++)
{
...
}
与
var collectionCount = collection.Count;
for (var i = 0; i < collectionCount; i++)
{
...
}
第二段代码的性能优于或等于第一段代码。只有在集合大小固定且计数不是每次计算的情况下,它才是相等的。例如,如果集合是不缓存长度的链接列表,情况就会好得多。
我知道,第二种方法不太可能会降低我的应