贤冰 2020-03-02
索引是存储引擎用于快速找到记录的一种数据结构,这也是索引的基本功能.在MySQL中也叫"键key".良好的性能少不了索引.换句话说,索引优化能够将查询性能轻松提高几个数量级.
select first_name from actor where actor_id = 5;
运行上面的查询:如果在actor_id列上有索引,MySQL将使用该索引去查找actor_id为5的列,也就是说:MySQL先在索引上按值查找,然后返回包含该值的数据行.
MySQL的索引由存储层实现,不同的存储引擎实现方式不同
MySQL支持的索引:
只有索引帮助存储引擎快速查找到记录的好处大于维护索引付出的成本时,索引才是有价值的
"独立的列":索引的列不能时表达式的一部分,也不能是函数的参数.
索引太长时可以只索引开始的部分字符,这样可以节省空间,提高效率. 但会降低索引的选择性.
在多个列上建立独立的单列索引大部分情况下不能提升MySQL的查询性能.
索引合并策略有时候是一种优化的结果,当更多时候说明了表上的索引建的和糟糕:
如果在explain中看到有索引合并,应该检查一下查询和表结构,确定的hi否已经是最优的,或者在某些时候可以关闭或者忽略索引.
正确的顺序依赖于使用该索引的查询,并同时需要考虑如何满足排序和分组的需要,索引列的顺序总是从左到右一次查找.
在不考虑排序和分组时将选择性最高的放在最前列通常时比较好的做法,不过仅局限在where查询.
但性能不只是依赖于索引列的选择性,也和查询条件的具体值有关,也就是值的分布.
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。