师姐,这藏经阁里的名册堆积如山,每次找个名字都要从头翻到尾,太慢了!有没有什么“缩地成寸”的法术?
当然有。只要在名册上建立 INDEX (索引),就像书的目录一样,能让你瞬间定位到想要的内容。
CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
注意: 虽然索引能加快查询速度,但会减慢更新速度(因为更新数据时也要更新索引)。所以,只在经常搜索的列上建立索引。
我们要经常按“姓氏”来查找弟子,所以给 LastName 列加上索引:
CREATE INDEX idx_lastname
ON Disciples (LastName);
如果你想让索引的值必须唯一(类似 UNIQUE 约束),可以用:
CREATE UNIQUE INDEX idx_email
ON Disciples (Email);
如果你经常同时用“门派”和“姓名”来查找(例如 WHERE Sect='...' AND Name='...'),那就建立一个组合索引:
CREATE INDEX idx_sect_name
ON Disciples (Sect, Name);
如果索引不再需要,或者它反而拖慢了更新速度,就把它删掉。
-- MySQL (青云门)
ALTER TABLE Disciples DROP INDEX idx_lastname;
-- SQL Server / Oracle / PostgreSQL
DROP INDEX idx_lastname;
既然索引这么好,我把所有列都加上索引岂不是飞快?
非也!索引也占用空间。若是所有列都加索引,就像给每个字都编目录,反而让书变得厚重无比,得不偿失。