mysql优化 索引

来源:互联网 发布:宋岳庭的故事 知乎 编辑:程序博客网 时间:2024/06/03 16:42

一.定长

  1. int(4):不代表只能存4个字符,只有 zerofill 时候有效,能够看出区别,且只有在命令行下可以看出区别
  2. time:定长
  3. char(4):定长 4个字符,而不是字节 renf是四个字符 1234是四个字符
    tinyint 1,2,3,4,5 与char a,b,c,d,e 相比 order by时候要快 char要考虑字符集与校对集

二.添加索引

  1. 添加唯一索引
    alter table shop_admin add unique user_pass(‘username’,’password’) username,password (唯一索引,一行数据只能出现一次 ) 与别的数据相比 必须有一个不同
    原数据 2 3
    新行 6 3 可以
    而 2 3 不可以

  2. 添加联合索引
    alter table shop_admin add index user_pa(‘username’,’password’)

三.索引覆盖(值必须要加引号,否则会不走索引)

  1. 索引覆盖
    select age from user where age>32
  2. 建立复合索引
alter table shop_admin add index user_pass_ip(adminuser,adminpass,loginip)explain select loginip,adminuser from shop_admin where loginip='1'

会发现 using index 索引覆盖,而没有遵循左前缀原则

会发现 using index 索引覆盖,而没有遵循左前缀原则

四.检测语句

  1. 检测执行时间
    set profilling=on;
    select *from shop_admin
    show profiles;

五. 例子

  1. 索引类型
    1,里面有text 字段
    select id from test order by id 更慢
    select id from test order by id,ver 更快

    innodb 聚簇索引,主键索引就是挂着所有数据, id,ver叶子拖着数据少
    id,ver 为次级索引 指向主键值
    myisam :非聚簇索引 索引指向磁盘位置 xx.myi(索引文件) xx.myd(数据文件)

  2. 区分度:
    select count(distinct(left(word,1))) /count(*)
    alter table shop_admin add key key_4( word(4) )
    统计 不重复的左面第一个字符 的数量

  3. 存储ip
    ①多建一列 crc32 建立索引
    ②或者翻转www.baidu.com=>moc.udiab.www

六.外键
外键用于:user表为主表 org_user表为从表,当user表删除一个用户后,从表也要删除对应的id的信息

alter table org_user add foreign key 'user_id' ('user_id') references user('id') on delete cascade on update NO ACTION
0 0
原创粉丝点击