|
Microsoft SQL Server prend en charge divers types d'index. Les deux catégories les plus larges sont en Cluster et non Cluster.
Dans notre introduction, nous avons vu qu'un index est créé principalement à l'aide d'une ou plusieurs colonnes d'une table désignée. Cela signifie que, lorsqu'il s'agit de l'utilisation de l'index, nous pourrions utiliser les valeurs stockées dans la (s) colonne (s) qui a (ont) été sélectionnée (s) pour l'index. Un tel index est considéré comme en cluster. Les colonnes qui font partie d'un index sont appelées clés.
Pour créer visuellement un index cluster, affichez la boîte de dialogue Indexes/Keys. Dans la boîte de dialogue, lors de la création d'une nouvelle indexation ou après avoir cliqué sur le nom d'un index existant, dans la liste de droite, cliquez sur créer en cluster et sélectionnez Oui :

Une fois que vous êtes prêt, cliquez sur Fermer.
Pour créer un index cluster dans SQL, utilisez la formule suivante :
CREATE CLUSTERED INDEX IndexName ON Table/View (Column (s))
De la description que nous avons donnée précédemment, le seul nouveau mot-clé ici est CLUSTERED. Sur cette base, voici un exemple :
-- =============================================
-- Database: Exercise
-- =============================================
USE master
GO
-- Drop the database if it already exists
IF EXISTS(SELECT name
FROM sys.databases
WHERE name = N'Exercise'
)
DROP DATABASE Exercise
GO
CREATE DATABASE Exercise
GO
USE Exercise;
GO
-- =============================================
-- Database: Exercise
-- Table; Employees
-- =============================================
CREATE TABLE Employees
(
EmployeeNumber int NOT NULL,
LastName nvarchar(20) NOT NULL,
FirstName nvarchar(20),
Username nchar(8) NOT NULL,
DateHired date NULL,
HourlySalary money
);
GO
INSERT INTO Employees
VALUES(62480, N'James', N'Haans', N'jhaans', N'1998-10-25', 28.02),
(35844, N'Gertrude', N'Monay', N'gmonay', N'2006-06-22', 14.36),
(24904, N'Philom©ne', N'Guillon', N'pguillon', N'2001-10-16', 18.05),
(48049, N'Eddie', N'Monsoon', N'emonsoon', N'08/10/2009', 26.22),
(25805, N'Peter', N'Mukoko', N'pmukoko', N'03-10-2004', 22.48),
(58405, N'Chritian', N'Allen', N'callen', N'06/16/1995', 16.45);
GO
CREATE CLUSTERED INDEX IX_Employees
ON Employees(LastName) ;
GO
Une table qui contient un index Cluster est appelée une table en Cluster.
Il existe différents aspects à un index Cluster :
- Pour faciliter la recherche des enregistrements, ils (les enregistrements) sont triés. Il est ainsi possible pour le moteur de base de données de continuer dans une approche de haut en bas et accéder rapidement à l'enregistrement de votre choix
- Sans que cela soit une exigence, chaque enregistrement doit être unique (nous avons déjà vu comment prendre soin de cela, à l'aide des contraintes de vérification ; par la suite nous verrons une fois de plus comment créer des enregistrements uniques)
- Il ne doit y avoir qu'un seul index cluster par table. Cela signifie que, si vous (décidez) créer un index Cluster sur une table, la table devient équipée. Si vous créez un autre index Cluster, le précédent (index Cluster) est supprimé
Un index Cluster utilise une liste triée des enregistrements d'une table ou une vue, un autre type d'index peut utiliser un mécanisme non fondé sur les enregistrements triés, mais sur un signet. C'est ce qu'on appelle un index non mis en Cluster. Par opposition à une table en Cluster qui ne peut contenir qu'un seul index Cluster, vous ne pouvez pas seulement créer un, mais bien 249 index non Cluster.
Pour créer visuellement un index non mis en Cluster, affichez la boîte de dialogue Indexes/Keys. Pour créer un nouvel index, cliquez sur le bouton Add. Si un index a toujours été créé ou défini comme en Cluster et vous souhaitez le modifier, vous pouvez modifier sa propriété Create As Clustered de Oui à Non.
Pour créer un index non Cluster dans SQL, utilisez la formule suivante :
CREATE NONCLUSTERED INDEX IndexName ON Table/View (Column (s))
Le nouveau mot-clé dans cette formule est NONCLUSTERED. Tout est le même comme précédemment indiqué. Sur cette base, voici un exemple :
-- =============================================
-- Database: Exercise
-- =============================================
USE master
GO
-- Drop the database if it already exists
IF EXISTS(SELECT name
FROM sys.databases
WHERE name = N'Exercise'
)
DROP DATABASE Exercise
GO
CREATE DATABASE Exercise
GO
USE Exercise;
GO
-- =============================================
-- Database: Exercise
-- Table; Employees
-- =============================================
CREATE TABLE Employees
(
EmployeeNumber int NOT NULL,
LastName nvarchar(20) NOT NULL,
FirstName nvarchar(20),
Username nchar(8) NOT NULL,
DateHired date NULL,
HourlySalary money
);
GO
INSERT INTO Employees
VALUES(62480, N'James', N'Haans', N'jhaans', N'1998-10-25', 28.02),
(35844, N'Gertrude', N'Monay', N'gmonay', N'2006-06-22', 14.36),
(24904, N'Philom©ne', N'Guillon', N'pguillon', N'2001-10-16', 18.05),
(48049, N'Eddie', N'Monsoon', N'emonsoon', N'08/10/2009', 26.22),
(25805, N'Peter', N'Mukoko', N'pmukoko', N'03-10-2004', 22.48),
(58405, N'Chritian', N'Allen', N'callen', N'06/16/1995', 16.45);
GO
CREATE NONCLUSTERED INDEX IX_Employees
ON Employees (LastName, FirstName);
GO
Si vous créez un index sans spécifier CLUSTERED ou NONCLUSTERED, le moteur de base de données le rend automatiquement non-clustered.
Formation pratique : Création d'un index Cluster avec SQL
|
|
- Dans la fenêtre CeilInn3, pour créer un index à l'aide de Transact-SQL, appuyez sur Ctrl + A pour sélectionner l'intégralité du texte, tapez la commande suivante :
USE CeilInn3
GO
IF EXISTS(SELECT name FROM sys.indexes
WHERE name = N'IX_RoomsIdentities')
DROP INDEX IX_RoomsIdentities
ON Rooms
CREATE NONCLUSTERED INDEX IX_RoomsIdentities
ON Rooms(RoomNumber, LocationCode) ;
GO
- Appuyez sur F5 pour exécuter
Index et création de table |
|
Dans la leçon 15, nous avons vu comment créer une clé primaire d'une table.Voici un exemple :
USE Exercise ;
GO
CREATE TABLE Students
(
StudentID int PRIMARY KEY,
FirstName
nvarchar(50) NOT NULL,
LastName nvarchar(50)) ;
GO
Lorsque vous effectuez cette opération, le moteur de base de données crée un index sur la table et automatiquement choisit la colonne de clé primaire comme sa clé. Vous avez la possibilité d'indiquer le type d'index que vous souhaitez créer. Pour le faire, sur le côté droit du nom de la colonne, entrez CLUSTERED ou NONCLUSTERED. Si vous ne spécifiez pas le type de l'index, l'option CLUSTERED est appliquée.
Formation pratique : Création d'un Cluster de tables
|
|
- Dans l'onglet CeilInn3, pour compléter la base de données, appuyez sur Ctrl + A et tapez le texte suivant :
USE CeilInn3 ;
GO
CREATE TABLE Customers (
Customer ID int identity (1, 1) primary key CLUSTERED NOT NULL,
AccountNumber nchar(10) UNIQUE,
FullName nvarchar(50) NOT NULL,
PhoneNumber nvarchar (20),
EmailAddress nvarchar(50),
CONSTRAINT CK_CustomerContact
CHECK((PhoneNumber IS NOT NULL) OR (EmailAddress IS NOT NULL))
);
GO
- Appuyez sur F5 pour exécuter
L'Entrée de données et l'analyse avec index |
|
Dans notre introduction, nous avons vu qu'un index peut rendre possible de prendre des mesures lors de la saisie de données, telles que veillant à ce qu'une colonne ait des valeurs uniques pour chaque enregistrement ou en veiller à ce que la combinaison des valeurs d'un groupe de colonnes sur le même enregistrement génère une valeur unique. Outre cette caractéristique des index, ils sont effectivement très utiles lorsqu'il s'agit de l'analyse de données.
Comme nous l'avons mentionné pour un livre, l'objectif principal d'un index est qu'il soit plus facile de localiser les enregistrements d'une table ou d'une vue.
Formation pratique : Saisie de données
|
|
- Remplacez le contenu de la fenêtre de CeilInn3 par ce qui suit :
USE CeilInn3 ;
GO
INSERT INTO Rooms (RoomNumber, LocationCode)VALUES(104, N'SLSP');
GO
INSERT INTO Rooms (RoomNumber, LocationCode,
BedType, Rate, Available)
VALUES(105, N'SLSP', N'King', 85.75, 1),
(106, N'SLSP ', N'King ', 85.75, 1)
GO
INSERT INTO Rooms (RoomNumber, LocationCode, Available)
VALUES(107, N'SLSP', 1)
GO
INSERT INTO Rooms (RoomNumber, LocationCode, BedType, Rate)
VALUES(108, N'SLSP', N'King', 85.75)
GO
INSERT INTO Rooms (RoomNumber, LocationCode, Available)
VALUES(109, N'SLSP', 1)
GO
INSERT INTO Rooms (RoomNumber, LocationCode, RoomType, Rate, Available)
VALUES(110, N'SLSP', N'Conference', 450.00, 1)
GO
- Appuyez sur F5 pour exécuter
Introduction à la controverse autour d'index |
|
Un index est rendu précieux de deux manières. D'une part, les enregistrements doivent être triés. Un index Cluster lui-même s'occupe de cet aspect car il trie interieurement et automatiquement ses enregistrements. Que se passe-t-il si les enregistrements ne sont pas uniques ? Par exemple, une mauvaise saisie de données sur une liste d'employés peut avoir deux ou plusieurs employés avec les enregistrements de l'employé même. Si vous créez un index pour une telle table, le moteur de base de données créerait des enregistrements en double sur l'index. Cela n'est généralement pas une bonne chose parce que lorsque vient le temps pour sélectionner des enregistrements, vous pouvez avoir trop d'enregistrements et prendre une mauvaise action.
Lors de la création d'une table, vous pouvez créer des index pour elle et permettre à l'index d'appliquer une règle qui stipule que chaque enregistrement soit unique. Pour s'occuper de cela, vous pouvez appliquer une règle d'unicité de l'index.
Si vous créez visuellement un index, dans la boîte de dialogue index/clés, sélectionnez l'index du côté gauche. Sur la liste de droite, définissez le champ Is Unique sur Oui. D'autre part, si vous souhaitez supprimer cette règle, définissez le champ Is Unique à Non.
Pour créer un index d'unicité dans SQL, appliquez le mot-clé UNIQUE dans la formule :
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name ON Table/View (Column (s))
Démarrez avec l'expression UNIQUE de CREATE, puis indiquez si elle pourrait être mise en Cluster ou non. Le reste suit les descriptions que nous avons vues précédemment. Voici un exemple :
--=============================================
--Database : Exercise
--=============================================
USE master
GO
--Drop the database if it already exists
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N'Exercise'
)
DROP DATABASE Exercise
GO
CREATE DATABASE Exercise
GO
USE Exercise ;
GO
--=============================================
--Database : Exercise
--Table ; Employees
--=============================================
CREATE TABLE Employees
(
EmployeeNumber int NOT NULL,
LastName nvarchar (20) NOT NULL,
FirstName nvarchar (20),
Username nchar(8) NOT NULL,
DateHired date NULL,
HourlySalary)money
);
GO
CREATE UNIQUE CLUSTERED INDEX IX_Employees
ON Employees(EmployeeNumber) ;
GO
Formation pratique : Utilisation des index : controverse autour d'un naufrage
|
|
- Dans l'onglet CeilInn3, appuyez sur CTRL + F5 et tapez le texte suivant :
USE CeilInn3 ;
GO
INSERT INTO Customers (AccountNumber, FullName),
PhoneNumber, Email Address)
VALUES(N'395805', N'Ann Zeke', N'301-128-3506', N'azeke@yahoo.jp')
(N '628475', N'Peter Dokta', N'(202) 050-1629',
N'pdorka1900@hotmail.com '),
(N '860042', 'N'Joan Summs, N ' 410 - 114 - 6820'
N'jsummons@emailcity.net'),
(N '228648', N'James Roberts',
N'(301) 097-9374', N'jroberts13579@gmail.net ')
GO
- Appuyez sur F5 pour exécuter
Index unique et saisie de données |
|
Une fois que vous avez spécifié l'unicité d'un index sur une table, lors de la saisie de données, si l'utilisateur entre une valeur qui existe déjà dans la table, une erreur serait produite. Voici un exemple :
USE Exercise ;
GO
INSERT INTO Employees (EmployeeNumber, FirstName,
LastName, HourlySalary)
VALUES(92935, N'Joan', N'Hamilton', 22.50)
GO
INSERT INTO Employees (EmployeeNumber, FirstName,
LastName, HourlySalary)
VALUES(22940, N'Peter', N'Malley', 14.25)
GO
INSERT INTO Employees (EmployeeNumber, FirstName,
LastName, HourlySalary)
VALUES(27495, N'Christine', N'Fink', 32.05)
GO
INSERT INTO Employees (EmployeeNumber, FirstName,
LastName, HourlySalary)
VALUES(22940, N'Gertrude', N'Monay', 15.55)
GO
INSERT INTO Employees (EmployeeNumber,FirstName,
LastName,HourlySalary)
VALUES (20285, N'Helene', N'Mukoko', 26.65)
GO
Cela donnerait :
(1 row (s) affected)
(1 row (s) affected)
(1 row (s) affected)
MSG 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in
object'dbo.Employees' with unique index 'IX_Employees'.
The statement has been terminated.
(1 row (s) affected)
La Tables et l'index de partition |
|
Les données de votre base de données peuvent impliquer plusieurs enregistrements, de milliers ou millions, d'autant qu'à un moment donné, il peut s'avérer difficile à gérer. Une façon que vous pouvez traiter cela consiste à stocker les enregistrements d'une table dans les groupes de fichiers différents. Il est ainsi possible de stocker une section d'enregistrements dans un seul groupe de fichiers, une autre section dans un autre groupe de fichiers, éventuellement une autre section dans un autre groupe de fichiers et ainsi de suite. Par conséquent, lorsque vient le temps de rechercher un ou quelques enregistrements parmi des milliers ou des millions d'enregistrements, il serait plus facile de localiser ou de les localiser. Bien entendu, les données appartiennent toujours à une base de données et à la même table.
Formation pratique : Présentation de partitionnement
|
|
- Ouvrez un utilitaire de fichier, tel que l'Explorateur Windows
- Affichez le contenu des disques
- Sur le lecteur C :, créez un dossier nommé Real Estate Main Repository
- Si vous avez une autre partition ou un autre lecteur comme D : créez-y un dossier et nommez-le Real Estate Third Repository. Puis, dans le code ci-dessous, remplacez le lecteur indiqué du référentiel secondaire immobilier vers ce lecteur
Si vous ne disposez pas d'un autre lecteur, créez un autre dossier sur le lecteur C: et nommez-le Real Estate Secondary Repository
- Si vous avez encore une partition ou un autre lecteur comme E :, créez-y un dossier et nommez-le Real Estate Third Repository. Puis, dans le code ci-dessous, remplacez le lecteur indiqué du Real Estate Third Repository vers ce lecteur
Si vous ne disposez pas d'un autre lecteur, sur le lecteur C :, créez un autre dossier Real Estate Third Repository
- Cochez chacun de ces dossiers et notez qu'ils sont vides
- Revenez à Microsoft SQL Server Management Studio.
- Pour ouvrir une nouvelle fenêtre de requête, dans la barre d'outils standard, cliquez sur le bouton New Query
- Pour créer une base de données et les groupes de fichiers d'accompagnement, tapez ce qui suit :
USE master;
GO
CREATE DATABASE RealEstate3
ON PRIMARY
( NAME = N'RealEstatePrimary',
FILENAME = N'C:\Real Estate Main Repository\RealEstateMain.mdf',
SIZE = 4MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP RealEstateGroupRecords1
( NAME = N'RealEstateRecords1',
FILENAME = N'C:\Real Estate Main Repository\RealEstateFirst.ndf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP RealEstateGroupRecords2
( NAME = N'RealEstateRecords2',
FILENAME = N'C:\Real Estate Secondary Repository\RealEstateSecond.ndf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP RealEstateGroupRecords3
( NAME = N'RealEstateRecords3',
FILENAME = N'C:\Real Estate Third Repository\RealEstateThird.ndf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
LOG ON
( NAME = N'RealEstate3Log',
FILENAME = N'C:\Real Estate Main Repository\RealEstateLogger.ldf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB);
GO
- Appuyez sur F5 pour exécuter
- Retournez aux utilitaires fichier tel que l'Explorateur Windows et vérifier le contenu de chacun des dossiers précédemment créés. Vérifiez également leurs tailles
- Revenez à Microsoft SQL Server Management Studio.
Avant de faire la partition d'une table, vous devez créer les groupes de fichiers nécessaires. Cela peut être fait lors de la création de la base de données car c'est à ce moment que vous spécifiez comment la base de données est stockée ; c'est-à-dire quels fichiers contiendront les informations de la base de données.
Après la création de la base de données et sur la création de ses groupes de fichiers. Avant de partitionner une table, vous devez créer une fonction de partition et un schéma de partition.
Une fonction de partition |
|
Une fonction de partition est utilisée pour définir les plages d'enregistrements qui seront stockées dans quel groupe de fichiers. La formule SQL pour créer une fonction de partition est la suivante :
CREATE PARTITION FUNCTION PartitionFunctionName (ParameterType)
AS RANGE [LEFT | RIGHT]
FOR VALUES (StartRange1, StartRange2, StartRange_n)
Pour l'utiliser à partir d'un modèle, ouvrez une fenêtre de requête. Dans l'Explorateur de modèles, développez le nœud de la fonction de partition. Faites glisser la fonction Create Partition et déposez-la dans la fenêtre de requête. Le Code Skeleton sera généré pour vous :
--=====================================
--Create Partition Function template
--=====================================
USE < database_name, sysname, AdventureWorks >
GO
CREATE PARTITION FUNCTION < partition_function_name, sysname, myRangePF > (< data_type_name, sysname, int >)
AS RANGE LEFT FOR VALUES (<data_value1,,1>, <data_value2,,100>, <data_value3,,1000>);
--La fonction de partition sur une colonne de partition col1 pourrait être partitionnée comme suit:
--partition 1: col1 less than or equal to <data_value1,,1>
--partition 2: col1 greater than <data_value1,,1> AND col1 less than or equal to <data_value2,,100>
--partition 3: col1 greater than <data_value2,,100> AND col1 less than or equal to <data_value3,,1000>
--partition 4: col1 greater than <data_value3,,1000>
La création d'une fonction de partition démarre avec l'expression CREATE PARTITION FUNCTION suivie d'un nom. Le nom suit les règles pour les noms dans Microsoft SQL Server. Parce que vous créez une fonction, le nom est suivi par des parenthèses.
Entre les parenthèses de la fonction, vous devez spécifier le type de données de la colonne qui sera utilisé pour créer une gamme d'enregistrements. Les valeurs de la colonne seront utilisées pour distinguer les plages d'enregistrements. Cela signifie que les valeurs de cette colonne doivent permettre au moteur de base de données de prédire une gamme d'enregistrements. C'est ce qu'on appelle la colonne de partitionnement. Par exemple, vous pouvez utiliser une colonne qui comporte un nombre de valeurs incrémentielles. C'est le cas pour une colonne de clé primaire d'identité. Autre exemple, vous pouvez utiliser une colonne qui contient une catégorie de valeurs, telles que les clients femelles contre les clients mâles et les clients enfants. Comme un exemple de plus, vous pouvez utiliser une colonne qui contient les dates de sorte que vous pouvez isoler des plages d'enregistrements d'une date à l'autre.
Après la parenthèse fermante, tapez AS RANGE, qui indique que vous allez spécifier les plages de valeurs. Ceci est suivi soit de LEFT ou de RIGHT. Lorsque la fonction partition aura été créée et que la table elle-même aura été créée, lorsque le moteur de base de données est demandé pour rechercher un enregistrement ou une plage d'enregistrements, il peut avoir à trier les enregistrements. Si vous souhaitez trier les enregistrements de gauche à droite, utilisez le mot-clé LEFT. Si vous souhaitez que les enregistrements soient triés de droite à gauche, utilisez le mot-clé RIGHT.
L'expression AS RANGE LEFT ou AS RANGE RIGHT est suivie de FOR VALUES qui est suivie de parenthèses.
Lors de la création d'une fonction de partition, vous devez fournir un moyen pour le moteur de base de données pour obtenir une plage d'enregistrements. Par exemple, vous pouvez utiliser des enregistrements du numéro 1 au numéro 1000, puis une autre plage de 1001 à 5000 et ainsi de suite. Ou vous pouvez spécifier qu'une plage d'enregistrements irait du 11 février 2000 au 26 juin 2005. Puis une autre plage irait du 26 juin 2005 au 14 décembre 2006 et ainsi de suite.
Vous spécifiez la plage dans les parenthèses qui suivent l'expression FOR VALUES. Tapez la première valeur de la première plage, suivie par une virgule, suivie de la première valeur de la deuxième plage et ainsi de suite.
Formation pratique : Création d'une fonction de partition
|
|
- Sélectionnez le contenu entier de la fenêtre de requête et tapez le texte suivant :
USE RealEstate3 ;
GO
CREATE PARTITION FUNCTION RealEstateSegmentation(int)
AS RANGE LEFT FOR VALUES(1, 10) ;
GO
- Appuyez sur F5 pour exécuter
Un schéma de partition spécifie les noms des groupes de fichiers, dans leur ordre qui stockera les plages d'enregistrements qui ont été créées dans la fonction de partition. La formule pour créer un schéma de partition est la suivante :
CREATE PARTITION SCHEME PartitionSchemeName
AS PARTITION PartitionFunctionName .
[ALL] TO ({file_group_name | [PRIMARY]} [,.. .n])
Vous démarrez avec l'expression CREATION PARTITION SCHEME pour mentionner votre intention. Ceci est suivi d'un nom. Le nom suit les règles d'objets.
Après le nom du schéma de partition, entrez AS PARTITION suivi du nom de la fonction de partition que vous devriez avoir créé précédemment.
Si vous envisagez d'utiliser un seul groupe de fichiers, après le nom de la fonction de partition, entrez ALL, suivi de parenthèses, dans lesquelles vous taperez PRIMARY.
Si vous envisagez d'utiliser des groupes de fichiers différents, après le nom de la fonction de partition, entrez TO, suivi de parenthèses. Nous avons vu que, dans les parenthèses de la fonction de partition FOR VALUES, vous avez entré la valeur de départ de la première plage. Dans les parenthèses du mot-clé TO, tapez le nom du groupe de fichier qui contiendra les enregistrements de la première plage de la fonction de partition. Nous avons également vu comment spécifier la deuxième plage dans la fonction de partition. Entre les parenthèses de la clause TO, après le nom du premier groupe de fichier, tapez une virgule suivie du nom du groupe de fichier qui contiendra les enregistrements de la deuxième plage.
Formation pratique : Création d'un schéma de fonction de partition
|
|
- Sélectionnez le contenu entier de la fenêtre de requête et tapez le texte suivant :
USE RealEstate3 ;
GO
CREATE PARTITION SCHEME RealEstateDistributionScheme
AS PARTITION RealEstateSegmentation
TO (RealEstateGroupRecords1, RealEstateGroupRecords2, RealEstateGroupRecords3);
GO
- Dans la barre d'outils de l'éditeur SQL, cliquez sur le bouton Exécuter
Partitionnement d'une table |
|
Après avoir créé le schéma de partition, vous pouvez créer la table. La formule pour spécifier un schéma de partition lors de la création d'une table est la suivante :
CREATE TABLE What We Have Learned So Far
(
What We Have Learned So Far
) ON PartitionSchemeName (ColumnName)
Vous démarrez avec l'expression CREATE TABLE, suivie des choses que nous avons apprises jusqu'ici : un schéma en option et un nom requis. Après le nom de la table, vous ouvrez et fermez les parenthèses, dans lequelles vous incluerez d'autres choses que nous avons vues jusqu'à présent : les colonnes, les contraintes et leurs options.
En dehors des parenthèses, tapez le mot clé ON, suivi du nom du schéma de partition que sera créé, suivi d'une ouverture et d'une parenthèse de fermeture. À l'intérieur des parenthèses du nom du schéma, saisissez le nom de la colonne de la table qui est la colonne de partitionnement.
Après la création de la table, vous pouvez l'utiliser, comme n'importe quelle table normale.
Formation pratique : Partitionnement d'une table
|
|
- Sélectionnez le contenu entier de la fenêtre de requête et tapez le texte suivant :
-- =============================================
-- Author: FunctionX
-- Database: RealEstate3
-- Date Created: Tuesday July 28th, 2009
-- =============================================
CREATE DATABASE RealEstate3;
GO
-- =============================================
-- Author: FunctionX
-- Database: RealEstate3
-- Table: PropertyTypes
-- Date Created: Tuesday July 28th, 2009
-- =============================================
USE RealEstate3;
GO
CREATE TABLE PropertyTypes
(
PropertyTypeID int identity(1,1) NOT NULL,
PropertyType varchar(20),
CONSTRAINT PK_PropertyTypes PRIMARY KEY(PropertyTypeID)
) ON RealEstateDistributionScheme(PropertyTypeID);
GO
INSERT INTO PropertyTypes(PropertyType)
VALUES(N'Condominium');
GO
INSERT INTO PropertyTypes(PropertyType)
VALUES(N'Single Family');
GO
INSERT INTO PropertyTypes(PropertyType)
VALUES(N'Townhouse');
GO
INSERT INTO PropertyTypes(PropertyType)
VALUES(N'Unknown');
GO
-- =============================================
-- Author: FunctionX
-- Database: RealEstate3
-- Table: Conditions
-- Date Created: Tuesday July 28th, 2009
-- =============================================
USE RealEstate3;
GO
CREATE TABLE Conditions
(
ConditionID int identity(1,1) NOT NULL,
Condition varchar(20),
CONSTRAINT PK_Conditions PRIMARY KEY(ConditionID)
) ON RealEstateDistributionScheme(ConditionID);
GO
INSERT INTO Conditions(Condition)
VALUES(N'Excellent');
GO
INSERT INTO Conditions(Condition)
VALUES(N'Good');
GO
INSERT INTO Conditions(Condition)
VALUES(N'Bad Shape');
GO
INSERT INTO Conditions(Condition)
VALUES(N'Mostly Damaged');
GO
-- =============================================
-- Author: FunctionX
-- Database: RealEstate3
-- Table: Properties
-- =============================================
CREATE TABLE Properties
(
PropertyID int identity(1,1) NOT NULL,
PropertyNumber char(6),
Address varchar(100),
City varchar(50),
State char(2),
ZIPCode varchar(12),
PropertyTypeID int
CONSTRAINT FK_PropertyTypes
FOREIGN KEY REFERENCES PropertyTypes(PropertyTypeID),
ConditionID int
CONSTRAINT FK_Conditions
FOREIGN KEY REFERENCES Conditions(ConditionID),
Bedrooms smallint,
Bathrooms float,
FinishedBasement bit,
IndoorGarage bit,
Stories smallint,
YearBuilt smallint,
MarketValue money,
CONSTRAINT PK_Properties PRIMARY KEY(PropertyID)
) ON RealEstateDistributionScheme(PropertyID);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'524880', N'1640 Lombardo Ave', N'Silver Spring', N'MD',
N'20904', 2, 2, 4, 2.5, 3, 1, 3, 1995, 495880.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'688364', N'10315 North Hacht Rd', N'College Park', N'MD',
N'20747', 2, 1, 4, 3.5, 3,
1, 2, 2000, 620724.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, FinishedBasement,
Stories, MarketValue)
VALUES(N'611464', N'6366 Lolita Drive', N'Laurel', N'MD',
N'20707', 2, 2, 1, 2, 422625.00);
GO
INSERT INTO Properties(Address, City, PropertyTypeID,
Bedrooms, MarketValue)
VALUES(N'9002 Palasko Hwy', N'Tysons Corner',
1, 2, 422895.00);
GO
INSERT INTO Properties(PropertyNumber, State,
ZIPCode, Bedrooms, YearBuilt, MarketValue)
VALUES(N'420115', N'DC',
N'20011', 2, 1982, 312555);
GO
INSERT INTO Properties(PropertyNumber, City, ZIPCode,
PropertyTypeID, Bedrooms, YearBuilt, MarketValue)
VALUES(N'917203', N'Alexandria', N'22024',
2, 3, 1965, 345660.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
PropertyTypeID, ConditionID, Bedrooms, Bathrooms, MarketValue)
VALUES(N'200417', N'4140 Holisto Crt', N'Germantown', N'MD',
1, 1, 2, 1, 215495.00);
GO
INSERT INTO Properties(City, State, PropertyTypeID, ConditionID,
Bedrooms, Bathrooms, YearBuilt, MarketValue)
VALUES(N'Rockville', N'MD', 1, 2, 2, 2, 1996, 436885.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'927474', N'9522 Lockwood Rd', N'Chevy Chase', N'MD',
N'20852', 3, 3, 3, 2.5, 3, 0, 3,
1992, 415665.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'207850', N'14250 Parkdoll Rd', N'Rockville', N'MD',
N'20854', 3, 2, 3, 2.5, 2, 1, 2,
1988, 325995.00);
GO
INSERT INTO Properties(City, PropertyTypeID, Bedrooms,
YearBuilt, MarketValue)
VALUES(N'Washington', 3, 4, 1975, 366775.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
YearBuilt, MarketValue)
VALUES(N'288540', N'10340 Helmes Street #408', N'Silver Spring', N'MD',
N'20906', 1, 2, 1, 1, 2000, 242775.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'247472', N'1008 Coppen Street', N'Silver Spring', N'MD',
N'20906', 2, 1,
3, 3, 3, 1, 3, 1996, 625450.00);
GO
INSERT INTO Properties(City, ZIPCode, PropertyTypeID,
Stories, YearBuilt, MarketValue)
VALUES(N'Chevy Chase', N'20956', 2,
3, 2001, 525450.00);
GO
INSERT INTO Properties(Address, City, State,
PropertyTypeID, ConditionID, Bedrooms, MarketValue)
VALUES(N'686 Herod Ave #D04', N'Takoma Park', N'MD',
1, 1, 2, 360885.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'297446', N'14005 Sniders Blvd', N'Laurel', N'MD',
N'20707', 3, 4,
4, 1.5, 3, 1, 2, 2002, 412885.00);
GO
INSERT INTO Properties(City, ZIPCode, ConditionID, Bedrooms,
Stories, YearBuilt)
VALUES(N'Silver Spring', N'20905', 2,
4, 2, 1965);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'924792', N'680 Prushia Rd', N'Washington', N'DC',
N'20008', 2, 2,
5, 3.5, 3, 0, 3, 2000, 555885.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'294796', N'14688 Parrison Street', N'College Park', N'MD',
N'20742', 2, 1,
5, 2.5, 2, 1, 2, 1995, 485995.00);
GO
INSERT INTO Properties(City, State, PropertyTypeID, ConditionID,
Bedrooms, Bathrooms, YearBuilt, MarketValue)
VALUES(N'Rockville', N'MD', 1, 2, 1, 1, 1996, 418885.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
YearBuilt, MarketValue)
VALUES(N'811155', N'10340 Helmes Street #1012', N'Silver Spring',
'MD', N'20906', 1, 2,
1, 1, 2000, 252775.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'447597', N'4201 Vilamar Ave', N'Hyattsville', N'MD',
N'20782', 3, 1,
3, 2, 2, 1, 3, 1992, 365880.00);
GO
INSERT INTO Properties(Address, ZIPCode, Bathrooms)
VALUES(N'1622 Rombard Str', 20904, 2.5);
GO
INSERT INTO Properties(City, State, PropertyTypeID, ConditionID,
Bedrooms, Bathrooms, YearBuilt, MarketValue)
VALUES(N'Rockville', N'MD', 1, 2, 1, 1, 1996, 420555.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'297415', N'980 Phorwick Street', N'Washington', N'DC',
N'20004', 2, 2,
4, 3.5, 3, 3, 1, 2004, 735475.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'475974', N'9015 Marvin Crow Ave', N'Gaithersburg', N'MD',
N'20872', 2, 4,
4, 2.5, 3, 1, 1, 1965, 615775.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'836642', N'3016 Feldman Court', N'Rockville', N'MD',
N'20954', 2, 3,
5, 3, 3, 1, 3, 1960, 528555.00);
GO
INSERT INTO Properties(Address, City, ZIPCode, PropertyTypeID,
Bedrooms, Bathrooms, YearBuilt, MarketValue)
VALUES(N'2444 Arielson Rd', N'Rockville', N'20854',
1, 2, 1, 1996, 475555.00);
GO
INSERT INTO Properties(City, State, PropertyTypeID, Stories)
VALUES(N'Rockville', N'MD',
3, 1);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'208304', N'7307 Everett Hwy', N'Washington', N'DC',
N'20012', 3, 1,
2, 2.5, 2, 0, 4, 2006, 420550.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms,
Bathrooms, YearBuilt, MarketValue)
VALUES(N'644114', N'10340 Helmes Street#1006', N'Silver Spring',
'MD', N'20906', 1, 2,
2, 2, 2000, 258445.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'937966', N'7303 Warfield Court', N'Tysons Corner', N'VA',
'22131', 2, 2,
3, 2.5, 3, 1, 4, 2006, 825775.00);
GO
INSERT INTO Properties(City, ZIPCode, ConditionID, Bedrooms,
Stories, YearBuilt)
VALUES(N'Fairfax', N'22232', 2, 3, 3, 1985);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'297497', N'12401 Conniard Ave', N'Takoma Park', N'MD',
N'20910', 3, 2,
3, 2.5, 3, 1, 3, 2004, 280775.00);
GO
INSERT INTO Properties(PropertyNumber, City, ZIPCode,
PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
YearBuilt, Stories, MarketValue)
VALUES(N'855255', N'Laurel', N'20707', 2,
4, 3, 2, 1962, 2, 342805.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'469750', N'6124 Falk Rd', N'Arlington', N'VA',
'22031', 2, 4,
4, 3.5, 3, 1, 1, 1982, 635995.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'826927', N'5121 Riehl Ace', N'Fairfax', N'VA',
'22232', 3, 1,
3, 1.5, 2, 0, 1, 2002, 325620.00);
GO
INSERT INTO Properties(City, ZIPCode, PropertyTypeID, Bedrooms,
Bathrooms, MarketValue)
VALUES(N'Silver Spring', N'20906', 1, 2, 2, 335655.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'287064 ', N'9533 Pensulian Rd', N'Silver Spring', N'MD',
N'20904', 2, 3,
3, 1.5, 3, 1, 2, 1992, 485775.00);
GO
INSERT INTO Properties(PropertyNumber, City, ZIPCode,
PropertyTypeID, ConditionID, Bedrooms, YearBuilt, Stories)
VALUES(N'724001 ', N'705 Helios Ave', N'20004',
3, 3, 3, 1974, 4);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'209275', N'944 Fryer Ave', N'Chevy Chase', N'MD',
N'20852', 2, 1,
5, 2.5, 3, 0, 2, 2002, 625665.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'204759', N'1950 Galego Street', N'Germantown', N'MD',
N'20874', 2, 1,
4, 3.5, 2, 1, 4, 2007, 428665.00);
GO
INSERT INTO Properties(PropertyNumber, Address, City, State,
ZIPCode, PropertyTypeID, ConditionID, Bedrooms, Bathrooms,
FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)
VALUES(N'937259', N'12366 Fowler Ave', N'Alexandria', N'VA',
'22031', 3, 2,
3, 1.5, 3, 1, 3, 2007, 402815.00);
GO
- Dans la barre d'outils de l'éditeur SQL, cliquez sur le bouton Exécuter
|
|