在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。
索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
ALTER TABLE students
ADD INDEX idx_score (score);
可以同时创建多个索引
注意:虽然在SQL中不区分大小写,在这里为了一眼看出来,SQL中的关键字使用大写,索引也是有索引名的,就叫做idx_score,后面括号中的东西才是真正的索引项。
关于索引的效率这完全取决于索引在分布的时候是不是散列的,在这里我们需要用到的东西是hash函数,将索引全部散列到真正的数据中,散列后的散列值越不相同,那么通过散列查找数据的效率就越高。
我们完全可以根据需要在一张表中创建多个索引,毫无疑问这样提高了索引的查询效率,但是在插入删除更新节点的时候也同时要修改索引。所以也不见得索引越多就是一件好事。
对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。
在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。
看似唯一的东西,因为业务逻辑的关系,并不适合作为主键。
ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);
对某一列添加一个唯一约束而不创建唯一索引 约束 constraint [constraint_name]
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);
数据库的索引对于用户和应用程序来说是透明的