正确的创建索引是可以实现高性能查询的基础
-1.使用独立的列
“独立的列”:是指索引不能是表达式的一部分,也不能是函数的参数
例如
虽然我们给actor_id 设置了 索引 但是,因为在这个查询语句中他是作为条件表达式的组成部分,因为我们肉眼是可以看到这个是4,但是mysql无法识别,所以我们把索引字段作为查询条件的时候,要简化,是独立的列,
-2.前缀索引和索引选择性
索引前缀是一种能让索引更小,更小的办法
mysql无法使用前缀索引做group by 和 order by
-3.多列索引
在多个列上建立独立的索引大部分情况下并不能提高mysql的查询性能,
-4.选择合适的索引列顺序
索引列顺序的选择,要考虑分组和排序在里面。左侧顺序,最左的优先级最高,根据自己的业务需求,设定索引列的顺序
例如根据 商品品牌id,和分类id查询的时候,分类的id应该是小于品牌id的个数的,那么我们就可以吧品牌id的索引顺序放在品牌前面,可以筛选掉不必要的扫描。
-5.聚簇索引
数据存储方式并不是单纯的索引。数据存储到索引的叶子页上,表示数据和索引key的值,紧紧的存储在一起
优点:
把数据和索引存放到一起,
数据访问更快
缺点:
更新聚簇索引列的数据成本很高
-6.覆盖索引
-7.索引和锁
indodb只有在访问行的时候才会对其加锁,索引能够减少InnodB访问的行数,从而减少锁的数量。
Innodb在二级索引上使用共享锁,在主键索引上使用的是排它锁。