Sdílet prostřednictvím


Vytváření indexů SQL Serveru

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

Ovladač OLE DB pro SQL Server zpřístupňuje funkci IIndexDefinition::CreateIndex , která umožňuje uživatelům definovat nové indexy v tabulkách SQL Serveru.

Ovladač OLE DB pro SQL Server vytváří indexy tabulek jako indexy nebo omezení. SQL Server uděluje oprávnění vytváření omezení vlastníkovi tabulky, vlastníkovi databáze a členům určitých administrativních rolí. Ve výchozím nastavení může pouze vlastník tabulky vytvořit index na tabulce. Úspěch nebo neúspěch CreateIndex tedy závisí nejen na přístupových právech uživatele aplikace, ale také na typu vytvořeného indexu.

Spotřebitelé určují název tabulky jako znak Unicode v členu pwszName sjednocení uName v parametru pTableID . Člen eKind v pTableID musí být DBKIND_NAME.

Parametr pIndexID může být NULL, a pokud ano, OLE DB Driver pro SQL Server vytvoří unikátní název pro tento index. Spotřebitel může zachytit název indexu zadáním platného ukazatele na DBID v parametru ppIndexID .

Spotřebitel může zadat název indexu jako znak Unicode v členu pwszName v rámci uName sjednocení parametru pIndexID . Člen eKind v pIndexID musí být DBKIND_NAME.

Spotřebitel specifikuje sloupec nebo sloupce, které se v indexu podílejí, podle jména. Pro každou strukturu DBINDEXCOLUMNDESC používanou v CreateIndex musí být člen eKind v pColumnID DBKIND_NAME. Název sloupce je zadán jako Unicode znakový řetězec v členu pwszNameuName sjednocení v pColumnID.

Ovladač OLE DB pro SQL Server a SQL Server podporuje vzestupné pořadí podle hodnot v indexu. Ovladač OLE DB pro SQL Server vrací E_INVALIDARG, pokud uživatel specifikuje DBINDEX_COL_ORDER_DESC v jakékoli struktuře DBINDEXCOLUMNDESC.

CreateIndex interpretuje vlastnosti indexu následovně.

ID vlastnosti Description
DBPROP_INDEX_AUTOUPDATE R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_CLUSTERED R/W: Čtení/zápis

Výchozí: VARIANT_FALSE

Popis: Řídí shlukování indexů.

VARIANT_TRUE: Ovladač OLE DB pro SQL Server se snaží vytvořit shlukovaný index v tabulce SQL Serveru. SQL Server podporuje maximálně jeden clusterovaný index na jakékoli tabulce.

VARIANT_FALSE: Ovladač OLE DB pro SQL Server se snaží vytvořit neclusterovaný index v tabulce SQL Server.
DBPROP_INDEX_FILLFACTOR R/W: Čtení/zápis

Výchozí hodnota: 0

Popis: Specifikuje procento indexové stránky používané pro úložiště. Další informace naleznete v tématu CREATE INDEX.

Typ varianty je VT_I4. Hodnota musí být větší nebo rovna 1 a menší nebo rovna 100.
DBPROP_INDEX_INITIALIZE R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLCOLLATION R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLS R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_PRIMARYKEY R/W: Čtení/zápis

Výchozí: VARIANT_FALSE Popis: Vytvoří index jako referenční integritu, omezení PRIMÁRNÍ KLÍČ.

VARIANT_TRUE: Index je vytvořen tak, aby podporoval omezení PRIMÁRNÍ KLÍČ tabulky. Sloupce musí být nenulovatelné.

VARIANT_FALSE: Index se nepoužívá jako omezení PRIMÁRNÍHO KLÍČE pro hodnoty řádků v tabulce.
DBPROP_INDEX_SORTBOOKMARKS R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TEMPINDEX R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TYPE R/W: Čtení/zápis

Žádné výchozí nastavení

Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_UNIQUE R/W: Čtení/zápis

Výchozí: VARIANT_FALSE

Popis: Vytvoří index jako JEDINEČNÉ omezení pro zúčastněný sloupec nebo sloupce.

VARIANT_TRUE: Index se používá k jednoznačnému omezení hodnot řádků v tabulce.

VARIANT_FALSE: Index jednoznačně neomezuje hodnoty řádků.

V souboru vlastností specifických pro poskytovatele DBPROPSET_SQLSERVERINDEX definuje OLE DB Driver pro SQL Server následující vlastnost informací o zdroji dat.

ID vlastnosti Description
SSPROP_INDEX_XML Typ: VT_BOOL (R/W)

Výchozí: VARIANT_FALSE

Popis: Když je tato vlastnost specifikována hodnotou VARIANT_TRUE pomocí IIndexDefinition::CreateIndex, výsledkem je vytvoření primárního xml indexu odpovídajícího indexovanému sloupci. Pokud je tato vlastnost VARIANT_TRUE, cIndexColumnDescs by měl být 1, jinak je to chyba.

Tento příklad vytváří index primárního klíče:

// This CREATE TABLE statement shows the referential integrity and   
// PRIMARY KEY constraint on the OrderDetails table that will be created   
// by the following example code.  
//  
// CREATE TABLE OrderDetails  
// (  
//    OrderID      int      NOT NULL  
//    ProductID   int      NOT NULL  
//        CONSTRAINT PK_OrderDetails  
//        PRIMARY KEY CLUSTERED (OrderID, ProductID),  
//    UnitPrice   money      NOT NULL,  
//    Quantity   int      NOT NULL,  
//    Discount   decimal(2,2)   NOT NULL  
//        DEFAULT 0  
// )  
//  
HRESULT CreatePrimaryKey  
    (  
    IIndexDefinition* pIIndexDefinition  
    )  
    {  
    HRESULT             hr = S_OK;  
  
    DBID                dbidTable;  
    DBID                dbidIndex;  
    const ULONG         nCols = 2;  
    ULONG               nCol;  
    const ULONG         nProps = 2;  
    ULONG               nProp;  
  
    DBINDEXCOLUMNDESC   dbidxcoldesc[nCols];  
    DBPROP              dbpropIndex[nProps];  
    DBPROPSET           dbpropset;  
  
    DBID*               pdbidIndexOut = NULL;  
  
    // Set up identifiers for the table and index.  
    dbidTable.eKind = DBKIND_NAME;  
    dbidTable.uName.pwszName = L"OrderDetails";  
  
    dbidIndex.eKind = DBKIND_NAME;  
    dbidIndex.uName.pwszName = L"PK_OrderDetails";  
  
    // Set up column identifiers.  
    for (nCol = 0; nCol < nCols; nCol++)  
        {  
        dbidxcoldesc[nCol].pColumnID = new DBID;  
        dbidxcoldesc[nCol].pColumnID->eKind = DBKIND_NAME;  
  
        dbidxcoldesc[nCol].eIndexColOrder = DBINDEX_COL_ORDER_ASC;  
        }  
    dbidxcoldesc[0].pColumnID->uName.pwszName = L"OrderID";  
    dbidxcoldesc[1].pColumnID->uName.pwszName = L"ProductID";  
  
    // Set properties for the index. The index is clustered,  
    // PRIMARY KEY.  
    for (nProp = 0; nProp < nProps; nProp++)  
        {  
        dbpropIndex[nProp].dwOptions = DBPROPOPTIONS_REQUIRED;  
        dbpropIndex[nProp].colid = DB_NULLID;  
  
        VariantInit(&(dbpropIndex[nProp].vValue));  
  
        dbpropIndex[nProp].vValue.vt = VT_BOOL;  
        }  
    dbpropIndex[0].dwPropertyID = DBPROP_INDEX_CLUSTERED;  
    dbpropIndex[0].vValue.boolVal = VARIANT_TRUE;  
  
    dbpropIndex[1].dwPropertyID = DBPROP_INDEX_PRIMARYKEY;  
    dbpropIndex[1].vValue.boolVal = VARIANT_TRUE;  
  
    dbpropset.rgProperties = dbpropIndex;  
    dbpropset.cProperties = nProps;  
    dbpropset.guidPropertySet = DBPROPSET_INDEX;  
  
    hr = pIIndexDefinition->CreateIndex(&dbidTable, &dbidIndex, nCols,  
        dbidxcoldesc, 1, &dbpropset, &pdbidIndexOut);  
  
    // Clean up dynamically allocated DBIDs.  
    for (nCol = 0; nCol < nCols; nCol++)  
        {  
        delete dbidxcoldesc[nCol].pColumnID;  
        }  
  
    return (hr);  
    }  

Viz také

Tabulky a rejstříky