相关疑难解决方法(0)

数据库索引如何工作?

鉴于索引在数据集大小增加时非常重要,有人可以解释索引在数据库无关的级别上的工作原理吗?

有关索引字段的查询的信息,请查看如何索引数据库列.

sql database indexing performance database-indexes

2335
推荐指数
8
解决办法
82万
查看次数

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

群集与非群集

我对SQL(Server 2008)的较低级别知识是有限的,现在由我们的DBA挑战.让我解释一下(我已经提到了明显的陈述,希望我是对的,但如果你看错了,请告诉我)情景:

我们有一张桌子可以为人们提供"法院命令".当我创建表(Name:CourtOrder)时,我创建了它:

CREATE TABLE dbo.CourtOrder
(
  CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
  PersonId INT NOT NULL,
  + around 20 other fields of different types.
)
Run Code Online (Sandbox Code Playgroud)

然后,我将非聚集索引应用于主键(以提高效率).我的理由是它是一个唯一的字段(主键),并且应该像我们经常那样被索引,主要用于选择目的Select from table where primary key = ...

然后我在PersonId上应用了CLUSTERED索引.原因是在物理上对某个人进行分组,因为绝大多数工作都是为了获得一个人的订单.所以,select from mytable where personId = ...

我现在已被拉上了这个.有人告诉我,我们应该将聚簇索引放在主键上,将正常索引放在personId上.这对我来说似乎很奇怪.首先,为什么要在特殊列上放置聚簇索引?什么是聚类?当然这是浪费聚集索引?我相信一个普通的索引会用在一个独特的列上.此外,聚类索引意味着我们不能聚集不同的列(每个表一个,对吧?).

我被告知我犯了一个错误的原因是他们认为在PersonId上放置聚集索引会使插入变慢.对于选择速度增加5%,我们将在插入和更新时降低95%的速度.这是正确有效的吗?

他们说因为我们聚集了personId,所以当我们插入或更改PersonId时,SQL Server必须重新排列数据.

那么我问过,为什么SQL会有一个CLUSTERED INDEX的概念,如果它这么慢?它和他们说的那么慢吗?我应该如何设置索引以获得最佳性能?我以为SELECT比INSERT更多......但他们说我们在INSERTS上遇到了锁定问题......

希望可以有人帮帮我.

sql indexing performance sql-server-2008

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

"聚集"在"聚集索引"中意味着什么?

可能的重复:
聚簇索引和非聚簇索引之间的区别聚簇索引
和非聚簇索引实际上是什么意思?

嗨专家,

" 聚集 " 一词在" 聚集索引 "中的含义是什么?我怀疑它与磁盘扇区的使用有关.因为我依稀记得Windows将磁盘空间组织成集群,集群由一个或多个512字节扇区组成.这两个概念有任何联系吗?

谢谢.

sql sql-server

14
推荐指数
2
解决办法
6023
查看次数

了解聚集索引

由于PostgreSQL不支持聚簇索引,我正在考虑MSSQL服务器.我已经阅读了比较聚簇索引和非聚簇索引的文章.文章的要点是(强调我的):

非聚簇索引存储值和指向包含该值的实际行的指针.

由于表中的行以与聚簇索引完全相同的顺序存储在磁盘上,因此聚簇索引不需要存储指向实际行的指针

据我所知,没有是很困难的,支持物理表的数据进行排序,特别是如果表是多个驱动器之间的分裂.现在,我遇到了聚集索引概念,假设数据以某种顺序存储在物理上.这就是我所困惑的.

问题:什么是聚簇索引结构?它支持tree式的结构穿越过来,像PosgtreSQL做了btree索引?

sql sql-server indexing

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

当数据按聚集索引的顺序时,覆盖索引是否会得到回报?

我的情景,我有帖子,按类别分组.对于类别的概述列表,我想显示具有类别的前10个帖子的摘要(与显示完整数据的类别的详细视图相对).前10个帖子由分数决定,分数来自另一个表(实际上是索引视图 - 但这在这里无关紧要).

表结构如下:

CREATE TABLE [dbo].[Categories]
(
    [Id] INT NOT NULL IDENTITY CONSTRAINT [PK_Categories] PRIMARY KEY,
    [Key] CHAR(10) CONSTRAINT [UK_Categories_Key] UNIQUE,
    [Caption] NVARCHAR(500) NOT NULL,
    [Description] NVARCHAR(4000) NULL
)
GO

CREATE TABLE [dbo].[Posts]
(
    [Id] INT NOT NULL IDENTITY CONSTRAINT [PK_Posts] PRIMARY KEY,
    [CategoryId] INT NOT NULL CONSTRAINT [FK_Posts_Category] FOREIGN KEY REFERENCES [dbo].[Categories] ([Id]),
    [Key] CHAR(10) CONSTRAINT [UK_Post_Key] UNIQUE,
    [Text] NVARCHAR(4000) NULL,
    [SummaryText] AS
        CASE WHEN LEN([Text]) <= 400
            THEN CAST([Text] AS NVARCHAR(400))
            ELSE CAST(SUBSTRING([Text], 0, 399) + NCHAR(8230) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server indexing

7
推荐指数
1
解决办法
444
查看次数

从数据库中检索的实体与查询中的情况相同

我的数据库包含下表:

表:

country {
    code varchar(255) not null
        primary key
};
Run Code Online (Sandbox Code Playgroud)

类:

@Entity
public class Country {
    @Id
    @Column(name = "code")
    private String mCode;

    public String getCode() {
        return mCode;
    }

    public void setCode(String code) {
        mCode = code;
    }
}
Run Code Online (Sandbox Code Playgroud)

样本表行:

| code |
|------|
| USA  |
| UK   |
Run Code Online (Sandbox Code Playgroud)

当我使用以下CrudRepository检索国家/地区时:

public interface CountryRepository extends CrudRepository<Country, String> {
}
Run Code Online (Sandbox Code Playgroud)

第一种情况:

mRepository.findOne("USA")
Run Code Online (Sandbox Code Playgroud)

它将在我的休息api中给出以下结果:

{
  "code": "USA"
}
Run Code Online (Sandbox Code Playgroud)

第二种情况:

mRepository.findOne("UsA")
Run Code Online (Sandbox Code Playgroud)

它将在我的休息api中给出以下结果:

{
  "code": "UsA"
}
Run Code Online (Sandbox Code Playgroud)

第三种情况:

mRepository.findOne("Usa")
Run Code Online (Sandbox Code Playgroud)

它将在我的休息api中给出以下结果:

{
  "code": …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-data-jpa

6
推荐指数
1
解决办法
534
查看次数

为什么在sql server中只能创建每个表的一个聚簇索引?

我在http://www.sql-server-performance.com/2007/clustered-indexes上阅读了有关sql server数据库的提示

最后,作者提到:"由于每个表只能创建一个聚簇索引,因此请花些额外的时间仔细考虑如何使用它."

我的问题是:

*为什么在sql server中只能创建每个表的一个聚簇索引?*

sql sql-server database-administration

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

Insert into Select不会正确插入相同的数据顺序

我在SQL Server 2014中使用了insert into命令,但没有插入相同的数据顺序.

它显示的行数相同,但数据顺序与您在下图中看到的数据顺序不同.

insert命令是:

insert into [test].[dbo].[HöjdKortvågVänster] ([Höjd kortvåg vänster (null)]) select [Höjd kortvåg vänster (null)] from [test].[dbo].[test111]
Run Code Online (Sandbox Code Playgroud)

图1:源表的Select命令

在此输入图像描述

图2:目标表的Select命令

在此输入图像描述

我该怎么做才能解决这个问题?

sql sql-server

5
推荐指数
1
解决办法
1121
查看次数

SQL Server中的唯一键是聚集索引还是非聚集索引?

我是SQL Server的新手,在学习聚簇索引时,我很困惑!

唯一键是聚簇索引还是非聚簇索引?唯一键仅在包含null的列中保存唯一值,因此根据此概念,唯一键应为聚簇索引,对吗?但是当我浏览本文时,我对MSDN感到困惑

创建UNIQUE约束时,默认情况下会创建一个唯一的非聚集索引来强制执行UNIQUE约束。如果表上的聚簇索引尚不存在,则可以指定唯一的聚簇索引。

请帮助我更好地理解这个概念,谢谢。

sql-server unique-key clustered-index

4
推荐指数
1
解决办法
9097
查看次数

在SQL中基于群集和非群集索引优化查询?

我最近一直在阅读如何clustered indexnon-clustered index有效的方法.我用简单的术语理解(如果错误,请纠正我):

支持clusterednon-clustered index存在的数据结构B-Tree

Clustered Index:根据索引列(或键)对数据进行物理排序.你只能有一个clustered Index每个table.如果没有index表创建过程中指定,SQL服务器将自动创建clustered Indexprimary key column.

Q1:由于数据是根据索引进行物理排序的,因此这里不需要额外的空间.它是否正确?那么当我删除我创建的索引时会发生什么?

Non-clustered Index:在non-clustered indexes,leaf-node树的包含列值和指向数据库中实际行的指针(行定位器).这里存在将non-clustered index table物理存储在磁盘上所需的额外空间.但是,一个不受数量的限制non-clustered Indexes.

Q2:这是否意味着对非聚集索引列的查询不会导致排序数据?

问题3:此处有一个额外的查找,用于使用叶节点处的指针定位实际的行数据.与聚簇索引相比,这会有多大的性能差异?

锻炼; Tibial:

考虑一个Employee表:

CREATE TABLE Employee
(
PersonID int PRIMARY KEY,
Name varchar(255),
age int,
salary int
); 
Run Code Online (Sandbox Code Playgroud)

现在我创建了一个employee表(创建了employee上的默认聚簇索引).

此表上的两个常见查询仅发生在年龄和工资列上.为简单起见,我们假设表不经常更新

例如:

select * from employee where age …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing clustered-index non-clustered-index

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

postgresql中二级索引的定义是什么?

https://www.postgresql.org/docs/9.6/static/indexes-index-only-scans.html

PostgreSQL中的所有索引都是辅助索引,这意味着每个索引都与表的主数据区(在PostgreSQL术语中称为表的堆)分开存储

在postgresql中,辅助索引是否定义为与表的主数据区分开存储的索引?

如果不是,它的定义是什么?为什么引用中提到的不是定义?

同样,主索引的定义是什么?

postgresql中的概念与Oracle数据库中的概念相同吗?

谢谢。

postgresql secondary-indexes

2
推荐指数
1
解决办法
888
查看次数

SQL Server主键快速结果

我想构建一个SQL Server数据库,其中一个表将包含200.000.000条记录.

该表有2列:Id和Value,其中Id是PrimaryKey并被索引.

我的问题是关于SQL Server的性能,我可以通过主键获得一个值多快?

sql sql-server sql-server-2014

0
推荐指数
1
解决办法
118
查看次数