zoukankan      html  css  js  c++  java
  • mysql添加索引和sql分析

    • mysql索引操作
    查看索引
    show indexes from students; #students为表名
    
    mysql添加索引命令
    
    创建索引
    1.PRIMARY  KEY(主键索引)
    mysql>ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  ) 
    2.UNIQUE(唯一索引)
    mysql>ALTER  TABLE  `table_name`  ADD  UNIQUE (`column` ) 
    3.INDEX(普通索引)
    mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column`  )
    4.FULLTEXT(全文索引)
    mysql>ALTER  TABLE  `table_name`  ADD  FULLTEXT ( `column` )
    5.多列索引
    mysql>ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column1`,  `column2`,  `column3`  )
    
    删除索引
    DROP INDEX indexname ON table_name;
    
    描述:
    PRIMARY, INDEX, UNIQUE 这3种是一类
    PRIMARY 主键。 就是 唯一 且 不能为空。
    INDEX 索引,普通的
    UNIQUE 唯一索引。 不允许有重复。
    FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
    
    后记:
    我今天用SQLyog工具创建索引,只能创建PRIMARY、UNIQUE、FULLTEXT,请教了DBA,她说可以不选择默认普通索引
    例子:
          explain SELECT `id`,`last_update_time`,`projectid` FROM yubotuig3_com.v2_article WHERE projectid = 150931 and status = 1 ORDER BY last_update_time desc LIMIT 0,4;
    
    
          explain SELECT COUNT(*) AS tp_count FROM yubotuig3_com.v2_article WHERE projectid = 172942 and status = 1 ORDER BY last_update_time desc LIMIT 1;
    
          给where条件添加了联合索引,又给order by单独建了索引
                ALTER  TABLE  `v2_article`  ADD  INDEX index_projectid_status(`projectid`,`status`);
                ALTER  TABLE  `v2_article`  ADD  INDEX index_last_update_time(`last_update_time`);
    • explain分析sql
    explain select * from test1 where id=1; #会出现:id  selecttype  table  type possible_keys  key key_len  ref rows  extra各列。
    
    其中
    type=const表示通过索引一次就找到了;
    key=primary的话,表示使用了主键;
    type=all,表示为全表扫描;
    key=null表示没用到索引。type=ref,因为这时认为是多个匹配行,在联合查询中,一般为REF。



    1.使用恰当的索引,是sql的效率倍增,类似sum的函数还有min(),max(),这些都需要在字段上建索引
    2.where 后面的函数不能包含表内容,要把函数放在 = 右连 如( update_time >= date_format(date_sub(curdate(), INTERVAL 90 DAY),
                                      '%Y-%m-%d 00:00:00')
       and  update_time <= date_format(date_sub(curdate(), INTERVAL 90 DAY),
                                      '%Y-%m-%d 23:59:59')
    )
    3.虚表是没有索引的
    SELECT
     count(1)
    FROM
     (
      SELECT
       a.*
      FROM
       (
        SELECT
         a.id,
         a.customer_id customerId,
         a.user_name userName,
         a.user_code userCode,
         a.type_code typeCode,
         a.type_name typeName,
         a.coupon_type couponType,
         a. STATUS,
         a.amount,
         a.leverage_ratio leverageRatio,
         a.effect_time effectTime,
         a.invest_id,
         a.use_time useTime,
         a.valid_days validDays,
         a.create_time createTime,
         a.update_time updateTime,
         a.invalid_time invalidTime,
         a.batch_no batchNo,
         c.id adviserId,
         c. NAME adviserName
        FROM
         pccb_coupon a
        LEFT JOIN customer_extend b ON a.customer_id = b.id
        LEFT JOIN pccb_adviser c ON b.agent_id = c.id
        WHERE
         1 = 1
       ) a
      WHERE
       1 = 1
      AND a.adviserName = '江左' #a是虚表,没有索引
     )
    原文地址:http:
    //database.51cto.com/art/201108/284783.htm
  • 相关阅读:
    Ubuntu10下MySQL搭建Amoeba_分片
    MySQL多Text字段报8126错误(解决过程)
    SQL Server 维护计划实现数据库备份(Step by Step)
    Ubuntu10下MySQL搭建Master Slave
    Ubuntu10下安装JAVA JDK
    Windows下安装MySQL最佳实践
    Ubuntu12下重新挂载硬盘
    Windows 下使用Git管理Github项目
    解决Windows Server2008 R2中IE开网页时弹出阻止框
    Win Server 2008中开启Areo特效
  • 原文地址:https://www.cnblogs.com/hanxiaohui/p/8488416.html
Copyright © 2011-2022 走看看