create_index
Create database indexes on SQL Server tables to improve query performance by organizing data for faster retrieval and enforcing unique constraints when needed.
Instructions
Creates an index on a specified column or columns in an MSSQL Database table
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| columns | Yes | Array of column names to include in the index | |
| indexName | Yes | Name for the new index | |
| isClustered | No | Whether the index should be clustered (default: false) | |
| isUnique | No | Whether the index should enforce uniqueness (default: false) | |
| schemaName | No | Name of the schema containing the table | |
| tableName | Yes | Name of the table to create index on |
Implementation Reference
- src/tools/CreateIndexTool.ts:33-66 (handler)The run method implements the core logic for creating an index on an MSSQL table using dynamic SQL query construction.async run(params: any) { try { const { schemaName, tableName, indexName, columns, isUnique = false, isClustered = false } = params; let indexType = isClustered ? "CLUSTERED" : "NONCLUSTERED"; if (isUnique) { indexType = `UNIQUE ${indexType}`; } const columnNames = columns.join(", "); const request = new sql.Request(); const query = `CREATE ${indexType} INDEX ${indexName} ON ${schemaName}.${tableName} (${columnNames})`; await request.query(query); return { success: true, message: `Index [${indexName}] created successfully on table [${schemaName}.${tableName}]`, details: { schemaName, tableName, indexName, columnNames, isUnique, isClustered } }; } catch (error) { console.error("Error creating index:", error); return { success: false, message: `Failed to create index: ${error}`, }; } }
- src/tools/CreateIndexTool.ts:8-31 (schema)Defines the input schema for the create_index tool, specifying parameters like schemaName, tableName, indexName, columns, isUnique, and isClustered.inputSchema = { type: "object", properties: { schemaName: { type: "string", description: "Name of the schema containing the table" }, tableName: { type: "string", description: "Name of the table to create index on" }, indexName: { type: "string", description: "Name for the new index" }, columns: { type: "array", items: { type: "string" }, description: "Array of column names to include in the index" }, isUnique: { type: "boolean", description: "Whether the index should enforce uniqueness (default: false)", default: false }, isClustered: { type: "boolean", description: "Whether the index should be clustered (default: false)", default: false }, }, required: ["tableName", "indexName", "columns"], } as any;
- src/index.ts:93-93 (registration)Instantiates the CreateIndexTool instance used throughout the server.const createIndexTool = new CreateIndexTool();
- src/index.ts:115-119 (registration)Registers the createIndexTool in the list of available tools returned by ListToolsRequestHandler.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: isReadOnly ? [listTableTool, readDataTool, describeTableTool] // todo: add searchDataTool to the list of tools available in readonly mode once implemented : [insertDataTool, readDataTool, describeTableTool, updateDataTool, createTableTool, createIndexTool, dropTableTool, listTableTool], // add all new tools here }));
- src/index.ts:138-140 (registration)Dispatches calls to the create_index tool by invoking its run method in the CallToolRequestHandler switch statement.case createIndexTool.name: result = await createIndexTool.run(args); break;