• mysql 索引


    一.  B+树索引 (适合高选择性字段,例如性别就是低选择性)

      

      分为聚集索引和辅助索引。聚集索引是根据主键创建的一颗B+树,聚集索引的叶子节点存放了表中的所有记录。

      辅助索引是根据索引键创建的一颗B+树,与聚集索引不同的是,其叶子节点存放索引键,以及索引键指向的主键。

      注意细节: Cardinality查看索引是否是高选择性。可以通过show index from tableName来查看。表示索引中唯一只记录数量的

      预估值。cardinality是一个预估值,应该尽可能接近1,如果非常小,那么就要考虑是否还有建立这个索引了。在访问高选择性属性的字段

         并从表中取出很少一部分数据时,对这个字段添加B+索引是非常有必要的.

              

        

         查看一个表中有几个索引 show index from tablename

        

        查看你用sql时,使用了那些索引.

        

        

    CREATE TABLE buy_log(
    	userid INT UNSIGNED NOT NULL,
    	title VARCHAR(20),
    	buy_date DATE
    )ENGINE=InnoDB;
    
    INSERT INTO buy_log VALUES (1,'zh', '2009-01-01');
    INSERT INTO buy_log VALUES (2,'zh', '2009-01-01');
    INSERT INTO buy_log VALUES (3,'zh', '2009-01-01');
    INSERT INTO buy_log VALUES (1,'zh', '2009-02-01');
    INSERT INTO buy_log VALUES (3,'zh', '2009-02-01');
    INSERT INTO buy_log VALUES (1,'zh', '2009-03-01');
    INSERT INTO buy_log VALUES (1,'zh', '2009-04-01');
    
    /*添加索引*/
    ALTER TABLE buy_log ADD KEY (userid);
    ALTER TABLE buy_log ADD KEY (userid,buy_date);  (联合索引)
    ALTER TABLE buy_log ADD KEY (userid,title);
    
    ALTER TABLE buy_log DELETE KEY (userid);
    /*删除索引 删除联合索引要删除索引名(用show index可以查看)*/
    drop index userid ON buy_log;


      

         指定索引
       /*USE INDEX(a) 告诉mysql优化器可以选择该索引,选不选还要看优化器自己判断*/
        explain select * from t USE INDEX(a) where a=1 and b=2;
      /*FORCE INDEX(a) 告诉mysql优化器必须选择使用该索引*/
        explain select * from t FORCE INDEX(a) where a=1 and b=2;
    

      

  • 相关阅读:
    linux 常用快捷键
    命令行远程链接
    mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]
    mybatis延迟加载
    mybatis跨XML引用
    eclipse修改项目名称
    wait, WIFEXITED, WEXITSTATUS
    进程通信中如何进行值得传递?
    fork新建进程
    Ubuntu安装genymotion模拟器步骤
  • 原文地址:https://www.cnblogs.com/shaoshao/p/4478430.html
Copyright © 2020-2023  润新知