mysql優化 索引

一.定長

  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章