0
点赞
收藏
分享

微信扫一扫

Mysql优化(3)索引优化

陈情雅雅 2022-03-11 阅读 56
  1. 索引的类型
  2. 主键索引(唯一索引的特殊类型)
  3. 唯一索引
  4. 普通索引
  5. 联合索引
  6. 索引碎片修复
    1、alter table t_name engine myisam;
    2、optimize table t_name
    修复表的数据及索引碎片,就会把所有的数据文件重新整理一遍,使之对齐.
    这个过程,如果表的行数比较大,也是非常耗费资源的操作.
    所以,不能频繁的修复.

    3、选择合适的存储引擎:InnoDB分裂
    对于InnoDB来说,因为节点下有数据文件,因些节点的分裂会比较慢,这也是插入速度不及MyISAM的原因
    对于InnoDB来说,尽量用整型,而且是递增的整型,如果是无南规律的数据,将会产生分裂,影响速度

4、索引覆盖:
a)是指 如果查询的列恰好索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据。这种查询速度非常快,称为索引覆盖
b)要回行到磁盘再找数据。

5、理想的索引
1、查询频繁、区分度高 、长度小、尽量能覆盖常用查询字段
1、索引长度:索引文件的大小会影响增删改查速度(占用内存多)
针对列中的值,从左往右截取部分,来建索引
1、截的越短,重复度越高,区分度越低,索引效果不好
2、截的越长,重复度越低,区分度越高,索引效果越好,但带来的影响也越大--增删改变慢,查也受影响(占内存)
惯用手法: 截取不同长度,并测试其区分度,
mysql> select count(distinct left(word,6))/count() from dict;
+---------------------------------------+
| count(distinct left(word,6))/count(
) |
+---------------------------------------+
| 0.9992 |
+---------------------------------------+

对于左前缀不易区分的列 ,建立索引的技巧
1: 把列内容倒过来存储,并建立索引,这样左前缀区分度大,

2: 伪hash索引效果,同时存 url_hash列

5、 多列索引的考虑因素---
列的查询频率 , 列的区分度,
以ecshop商城为例, goods表中的cat_id,brand_id,做多列索引
从区分度看,Brand_id区分度更高,

6、伪hash列:crc函数将字符串转换为整型
把要存的数据存为一列,加一列hash列作为索引

举报

相关推荐

0 条评论