这ORDER BY通常很慢吗?我试图运行一些sql语句,其中该WHERE子句非常简单,但后来我尝试ORDER BY在VARCHAR(50)索引列上.
出于显示原因,我需要按字母顺序排序.我认为让数据库为我做这个是最有效的.
在这一点上,我期待着
这是我尝试运行的实际查询:
// B.SYNTAX is a TEXT/CLOB field
// Indexes on NAME, MODULENAME. PREVIOUS is a CHAR(1) with no index
"SELECT A.NAME, B.SYNTAX, B.DESCRIPTION, A.RATE1, A.RATE2,
A.RATE3, A.STARTDATE, A.ENDDATE, A.HIDE, A.CATEGORYNAME
FROM A, B WHERE A.MODULENAME='"+loadedModuleName+"'
AND A.NAME = B.NAME AND (A.PREVIOUS<>'N' OR A.PREVIOUS IS NULL)
ORDER BY A.NAME"
Run Code Online (Sandbox Code Playgroud)
表A的大小约为2000行,B约为500行.
我可能还应该提到,由于我们支持多个数据库,因此无法进行太多数据库特定的优化.此外,该应用程序部署在客户站点.
我期待返回数百条记录(少于1000条).
你会怎么做?任何提示都表示赞赏.谢谢.
我最近参与了一个使用SQL Server 2000进行数据存储的新软件项目.
在审查项目时,我发现其中一个主表在其主键上使用聚簇索引,该索引由四列组成:
Sequence numeric(18, 0)
Date datetime
Client varchar(9)
Hash tinyint
Run Code Online (Sandbox Code Playgroud)
该表在正常操作过程中经历了大量插入.
现在,我是一名C++开发人员,而不是数据库管理员,但我对此表设计的第一印象是,将这些字段作为聚簇索引对插入性能非常不利,因为数据必须在物理上重新排序每个插入.
另外,我不能真正看到任何好处,因为人们必须经常查询所有这些字段以证明聚簇索引的合理性,对吧?
因此,基本上我需要一些弹药,以便在我找到能够说服他们应该改变桌子设计的能力时.
INDEX表达式有什么作用?最后的一个例子:
CREATE TABLE tags (
tag_id varchar(255) NOT NULL,
"{Users}{userID}question_id" int4 NOT NULL,
tag varchar(20),
CONSTRAINT tag
PRIMARY KEY (tag_id));
CREATE INDEX tags_tag
ON tags (tag);
Run Code Online (Sandbox Code Playgroud) 一位老导师曾告诉我在大多数你使用WHERE条款的东西上放置索引.
我应该把索引放在BOOL/TINYINT's?在我正在使用的表格中有相当数量的这些,并且通常会在这些布尔条件的1-20中过滤结果.
我有一台仓库服务器从旧系统24/7获取数据/同步,我注意到我的某些报表/ SQL作业性能不确定,而且大多数时候我从DBA团队那里得知我的查询正在阻止其他同步过程。
从DBA团队了解到命令EXEC SP_WHO2,通过查看列BlkBy,我可以通过该命令识别导致阻塞的查询的spid。
请建议我我如何才能避免堵塞等方式,检查阻塞在SQL服务器
sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2 sql-server-2012