SQL 索引
SQL中的索引是一种特殊的表,用于加快对数据库表中数据的搜索。它还经常从表中检索大量数据。索引需要在硬盘上占用自己的空间。
在SQL中,索引的概念与小说或书籍中的索引概念相同。
它是提高查询性能的最佳SQL技术。使用索引的缺点是它们会减慢UPDATE和INSERT语句的执行时间。但它们也有一个优点,即加快SELECT和WHERE语句的执行时间。
在SQL中,索引是在表的字段上创建的。我们可以轻松地在一个表上建立一个或多个索引。索引的创建和删除不会影响数据库的数据。
在本文中,您将学习如何在SQL数据库中创建、修改和删除索引。
为什么需要SQL索引?
以下原因说明了为什么需要SQL索引:
- SQL索引可以快速搜索大型数据库的信息。
- 对于包含不同值的列,这个概念是一个快速的过程。
- 这种数据结构将列(字段)的数据值按升序或降序排序。然后,它为每个值分配了一个条目。
- 每个索引表只包含两列。第一列是row_id,另一列是索引列。
- 当与较小的表一起使用索引时,可能无法认识到索引的性能。
创建索引(Create an INDEX)
在SQL中,我们可以使用以下CREATE语句轻松创建索引:
CREATE INDEX Index_Name ON Table_Name ( Column_Name);
在这里, Index_Name 是我们想要创建的索引的名称,而 Table_Name 是要在其上创建索引的表的名称。 Column_Name 表示要应用索引的列的名称。
如果我们想要在两个或更多列的组合上创建索引,则可以使用以下SQL语法:
CREATE INDEX Index_Name ON Table_Name ( column_name1, column_name2, ...., column_nameN);
在SQL中创建索引的示例:
让我们来看一个员工表:
Emp_Id | Emp_Name | Emp_Salary | Emp_City | Emp_State |
---|---|---|---|---|
1001 | Akshay | 20000 | Noida | U.P |
1002 | Ram | 35000 | Jaipur | Rajasthan |
1003 | Shyam | 25000 | Gurgaon | Haryana |
1004 | Yatin | 30000 | Lucknow | U.P |
下面的SQL查询在Employee表的Emp_State列上创建了一个名为’Index_state’的索引。
CREATE INDEX index_state ON Employee (Emp_State);
假设我们想在上述 Employee 表的 Emp_city 和 Emp_State 这两列的组合上创建一个索引。为此,我们必须使用以下查询:
CREATE INDEX index_city_State ON Employee (Emp_City, Emp_State);
创建唯一索引
唯一索引在SQL中与主键相同。唯一索引不允许选择包含重复值的列。
这个索引是维护SQL表的数据完整性的最佳方式。
创建唯一索引的语法如下:
CREATE UNIQUE INDEX Index_Name ON Table_Name ( Column_Name);
在SQL中创建唯一索引的示例:
让我们以上面的Employee表为例。以下SQL查询在Employee表的Emp_Salary列上创建唯一索引 ndex_salary 。
CREATE UNIQUE INDEX index_salary ON Employee (Emp_Salary);
重命名索引
我们可以使用ALTER命令轻松重命名关系数据库中表的索引。
语法:
ALTER INDEX old_Index_Name RENAME TO new_Index_Name;
重命名 SQL 中的索引示例:
以下 SQL 查询将索引 ‘index_Salary’ 重命名为 ‘index_Employee_Salary’ 以上述 Employee 表为例:
ALTER INDEX index_Salary RENAME TO index_Employee_Salary;
删除索引
使用DROP命令,可以轻松地从SQL数据库中删除表的索引。如果您想从数据字典中删除索引,则必须是数据库的所有者或具有删除权限。
在关系数据库中,删除索引的语法如下:
在Oracle数据库中:
DROP INDEX Index_Name;
在MySQL数据库中:
ALTER TABLE Table_Name DROP INDEX Index_Name;
在Ms-Access数据库中:
DROP INDEX Index_Name ON Table_Name;
在SQL Server数据库中:
DROP INDEX Table_Name.Index_Name;
SQL中删除索引的示例:
假设我们要从SQL数据库中删除上述的 ‘index_Salary’ 。为此,我们必须使用以下SQL查询:
DROP INDEX index_salary;
修改索引
在关系数据库中,可以使用ALTER命令来轻松修改表的索引。
SQL中修改索引的基本语法如下:
ALTER INDEX Index_Name ON Table_Name REBUILD;
何时不应在SQL中使用索引?
在以下情况下或者以下情境中,不应在SQL中使用索引:
- 当表的大小很小时,可以避免使用SQL索引。
- 当表需要频繁更新时。
- 当表的某一列包含大量NULL值时,不应使用索引。