预处理语句
将SQL语句分离成两个部分,准备和执行
准备 将SQL语句发送给服务器进行解析,编译和优化 生成一个执行计划并缓存
执行 将传递过来的参数作用在缓存好的查询计划再执行
优点:
1.减少重复解析和编译
2.防止SQL语句注入,避免拼接字符串而导致SQL注入
索引是什么?
一种有序的存储结构
按照单个或者多个列的值进行排序
索引的目的:提升搜索效率
索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引
索引分类:
数据结构:B+树索引、hash索引、全文索引(根据关键字索引全局)
物理存储:聚集索引、辅助索引(二级索引)
在innodb中,主键索引的B+树包含表数据信息。
B+树
全称:多路平衡搜索树,减少磁盘访问次数,用来组织磁盘数据,以页为单位,物理磁盘页一般为4k,innodb默认页大小为16k,对页的访问是一次磁盘io,缓存中会缓存常访问的页。
特点:非叶子节点只存储索引信息,叶子节点存储具体数据信息,叶子节点之间互相连接,方便范围查询。每个索引对应着一个b+树。
列属性:主键索引、唯一索引、普通索引、前缀索引
列的个数:单列索引、组合索引
索引的代价:占用空间,维护的代价。一张表不能维护多张表,DML操作变慢
索引的使用场景:where、group by、order by
不要使用索引场景:没有where/group by/order by中使用,区分度不高的列,经常修改的列,表数据量少
主键选择:
innodb中表是索引组织表,每张表有且仅有一个主键。
1.如果显示设置PRIMARY KEY,则该设置的key为该表的主键。
2.如果没有显示设置,则从非空唯一索引中选择:
a. 只有一个非空唯一索引,则选择该索引为主键。
b. 有多个非空唯一索引,则选择声明的第一个为主键。
3.没有非空唯一索引,则自动生成一个6字节的_rowid作为主键。