1.索引的概念 通过使用 数据中的部分数据作为关键字,建立该关键字与数据间位置的对应关系,称之为索引
索引的关键字,一定是排序过的。
查找对应的记录时,先在索引中进行检索,快速的定位为该关键字对应的记录位置,直接去该位置,将记录找到即可
索引一般分为4种
主键索引,唯一索引,全文索引,普通索引 当然还有全文索引 这个要根据使用的引擎不同区分 比如myisam支持全文索引 而innodb不支持
普通索引 index
对关键字,没有任何要求
唯一索引 unique index
要求索引关键字不能重复。
反过来:如果一个字段(字段组)中,被创建了唯一索引,同时也就约束了该字段(字段组),不能添加重复数据。
主键索引 primary key
要求关键字不能重复,同时不能为null。
全文索引 fulltext index
生成关键字的方式不同。
除全文索引外,其他的索引都是,直接使用字段数据作为索引关键字。
而全文索引:先对需要索引的字段,进行关键字提取,分析内容,将其中有意义的词提取作为关键字:
在执行SQL前,MySQL会形成执行计划,内包含了当前的SQL执行所采用的策略。
MySQL支持 将执行计划获取。
通过 explain select 语法!
获取select查询语句的执行计划!
索引一般用在哪里呢
1.where后面的字段 如果建立了索引是可以使用的
2.orderby 后面的字段
3.连表查询时的条件字段
使用索引注意的地方
1.字段独立 比如where id=1 id是设置了主键索引的 那么id不能参与表达式 像where id+1=3这样 索引就不起作用了
2.左原则 左原则分二种情况 第一种模糊匹配 比如 where name like "ss%" 这样是可以的 但是模糊匹配的字段左边有通配符就不能使用索引 比如where name like "%ss"
第二种情况是 联合索引 比如建立了一个联合索引 key lh (name,age) 那么where name = ss 才能用到联合索引 而where age =18 是用不到的
合索引的关键字顺序,先按照左边字段排序,如果左边字段相同,则按照右边字段排,以此类推
3.or原则
要保证 OR两侧的表达式都有索引可以使用,才会用到索引 比如where name =ss or age =15 要在name和age 二个字段上都建立索引 这个sql语句才能用到索引
有时候mysql也会根据优化器自动判断是否使用索引
总结一句话
为可能的场景,建立索引。考虑SQL,是否满足语法规范
前缀索引
如果你一个字段很长 你想在这个字段上建一个索引 可以选择利用这个字段的前多少个字符做为索引 选择字符长度的原则就是具有足够的辨识度 也就是重复率吧
全文索引
mysql的全文索引不支持中文 所以一般用 斯文克斯也就是sphinx结合mysql做全文索引