SQL 索引

SQL 索引


 索引是一种特殊的查询表,可以被数据库搜索引擎用来加速数据的检索。简单说来,索引就是指向表中数据的指针。数据库的索引同书籍后面的索引非常相像。

 例如,如果想要查阅一本书中与某个特定主题相关的所有页面,你会先去查询索引(索引按照字母表顺序列出了所有主题),然后从索引中找到一页或者多页与该主题相关的页面。

 索引能够提高 SELECT 查询和 WHERE 子句的速度,但是却降低了包含 UPDATE 语句或 INSERT 语句的数据输入过程的速度。索引的创建与删除不会对表中的数据产生影响。

 创建索引需要使用 CREATE INDEX 语句,该语句允许对索引命名,指定要创建索引的表以及对哪些列进行索引,还可以指定索引按照升序或者降序排列。

 同 UNIQUE 约束一样,索引可以是唯一的。这种情况下,索引会阻止列中(或者列的组合,其中某些列有索引)出现重复的条目。


CREATE INDEX 命令:


 CREATE INDEX命令的基本语法如下:

CREATE INDEX index_name ON table_name;

单列索引:

 单列索引基于单一的字段创建,其基本语法如下所示:

CREATE INDEX index_name
ON table_name (column_name);

唯一索引:

 唯一索引不止用于提升查询性能,还用于保证数据完整性。唯一索引不允许向表中插入任何重复值。其基本语法如下所示:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

 如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX index_name
on table_name (column1, column2);

隐式索引:

 隐式索引由数据库服务器在创建某些对象的时候自动生成。例如,对于主键约束和唯一约束,数据库服务器就会自动创建索引。

DROP INDEX 命令:

 索引可以用 SQL DROP 命令删除。删除索引时应当特别小心,数据库的性能可能会因此而降低或者提高。

 其基本语法如下:

DROP INDEX table_name.index_name;

什么时候应当避免使用索引?


 尽管创建索引的目的是提升数据库的性能,但是还是有一些情况应当避免使用索引。下面几条指导原则给出了何时应当重新考虑是否使用索引:

  • 小的数据表不应当使用索引;
  • 需要频繁进行大批量的更新或者插入操作的表;
  • 如果列中包含大数或者 NULL 值,不宜创建索引;
  • 频繁操作的列不宜创建索引。


目录

SQL 教程

开始学习SQL
SQL 简介
SQL RDBMS 概念
SQL 语法
SQL开发的智能助手:通义灵码在IntelliJ IDEA中的应用
SQL Select(选择) 语法
SQL SELECT DISTINCT(选择不同) 语法
SQL WHERE Clause(查询子句)
SQL AND, OR and NOT(与,或不是运算符)
SQL ORDER BY Keyword(按关键字排序)
SQL INSERT INTO 语句(在表中插入)
SQL NULL Values(空值)
SQL UPDATE 语句(更新表中的记录)
SQL Delete 语句(删除表中的记录)
SQL 运算符
SQL 表达式
SQL 选择数据库 USE语句

SQL 高级教程

SQL SELECT TOP, LIMIT, ROWNUM
SQL LIKE 运算符
SQL Wildcards 通配符
SQL IN 运算符
SQL BETWEEN运算符
SQL 通用数据类型
SQL 语句快速参考
SQL Join连接
SQL INNER JOIN 关键字(内部连接)
SQL 左连接 LEFT JOIN 关键字
SQL右连接 RIGHT JOIN 关键字
SQL FULL OUTER JOIN 关键字(完整外部连接)
SQL自连接 Self JOIN
SQL UNION 运算符
SQL SELECT INTO 语句
SQL INSERT INTO SELECT 语句
SQL 撤销索引、表以及数据库
SQL CREATE DATABASE 语句
SQL CREATE TABLE 语句
SQL ALTER TABLE 语句
SQL AUTO INCREMENT 字段
SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
SQL Server 和 MySQL 中的 Date 函数
SQL NULL 值 – IS NULL 和 IS NOT NULL

SQL 进阶

SQL Aliases 别名
SQL 约束
SQL NOT NULL 约束
SQL UNIQUE 约束
SQL PRIMARY KEY 约束
SQL FOREIGN KEY 约束
SQL DEFAULT 约束
SQL CHECK 约束
SQL JOIN 连接
SQL UNION 子句
SQL 克隆数据表
SQL 索引
SQL 子查询
SQL ALTER TABLE 命令
SQL TRUNCATE TABLE 命令
SQL 处理重复数据
SQL 使用视图
SQL 注入
SQL HAVING 子句
SQL 事务
SQL 使用序列
SQL 通配符
SQL 临时表
SQL MS Access、MySQL 和 SQL Server 数据类型

SQL 函数

SQL 函数
SQL MAX() 函数
SQL MIN() 函数
SQL COUNT() 函数
SQL AVG() 函数
SQL SUM() 函数
SQL 日期函数
SQL FIELD()函数
SQL FIRST() 函数
SQL LAST() 函数
SQL GROUP BY 语句
SQL HAVING 子句
SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE()
SQL UPPER()函数
SQL LOWER()函数
SQL UCASE() 函数
SQL LCASE() 函数
SQL MID() 函数
SQL LEN() 函数
SQL ROUND() 函数
SQL NOW() 函数
SQL FORMAT() 函数
SQL SQRT() 函数
SQL RAND() 函数
SQL CONCAT() 函数
SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
SQL REPLACE()字符串替换函数
SQL TRIM()函数去除字符串头尾空格
SQL 主机
SQL 总结

实例/测验

SQL 测验

拓展阅读

详尽的SQL语句大全分类整理(打包下载)
详细实例全面解析SQL存储过程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }