索引是为了提高查询速度的一种数据结构(比如BTREE)
没有建立索引时查找数据只能从上向下顺序查找,时间复杂度是n/2,建立二叉树的索引结构后二叉树的查找效率是log2n,二叉树的节点指向表中的数据行,这样就提高了查找效率.BTREE的m叉树原理一样
索引的缺点:
1 占用空间
2 增删改表时要维护索引(重新平衡二叉树),会降低增删改的速度
索引类型:
BTREE:最常见的索引类型
HASH:只有memory引擎支持
R-tree:空间索引,有关地理位置时使用
Full-text:全文索引
B+树中所有数据都存在叶子节点,非叶子节点只起到索引的作用
mysql中主键不用单独创建索引,会自带主键索引
查看表的索引 show index from table_name
删除索引: drop index index_name on table_name
建表后添加索引:
添加主键索引,值唯一且非空 alter table table_name add primary key(column_list);
添加唯一索引,可以为空值且出现多次 alter table table_name add unique index_name(column_list);
添加普通索引,索引值可以重复 alter table table_name add index index_name(column_list);
索引设计原则:
查询频率高,数据量大
索引列选择where后的条件,on 后的表连接字段