zoukankan      html  css  js  c++  java
  • MySql索引(精简)

    话不多说奔主题,精神抖擞就是干!

    1. 建立索引的目的是:为了加快查询速度,因为全表扫描太慢。

    2. 有哪些索引可以使用:主键索引、唯一索引、普通索引、组合索引、全文索引。

    3. 每个索引的特点是什么?

      1). 主键索引:一般用在表id字段上,并且其关联的列的值一般是int自增、唯一、非NULL的。

      2). 唯一索引:与主键索引的区别是其关联的列的值可以是NULL的。

      3). 普通索引:这个没啥好讲的。

      4). 组合索引:一个索引对应多个列(其实数据库也同时自动创建了对应的多个单列索引)。

      5). 全文索引:需要添加索引的列的数据比较大(例如:text等),而且一般是要搜索该列数据中的关键字时。

    4. 如何创建这些索引?

    例如我们有一张表

    CREATE TABLE `user` (
       `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
       `nickname` varchar(12) NOT NULL DEFAULT '' COMMENT '用户昵称',
       `account` varchar(12) NOT NULL DEFAULT '' COMMENT '帐号',
       `password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
       `message` text NOT NULL DEFAULT '' COMMENT '备注信息',
       `created_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
       `updated_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
       PRIMARY KEY (`id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息表';

      1). 创建唯一索引

      CREATE UNIQUE INDEX account_UNIQUE_Index ON `user`(`account`);

      或者
      ALTER TABLE `user` ADD UNIQUE INDEX account_UNIQUE_Index(`account`);

      2). 创建普通索引

      CREATE INDEX account_Index ON `user`(`account`);

      或者
      ALTER TABLE `user` ADD INDEX account_Index(`account`);

      3). 创建组合索引

      CREATE INDEX nickname_account_createdTime_Index ON `user`(`nickname`, `account`, `created_time`);
      或者
      ALTER TABLE `user` ADD INDEX nickname_account_createdTime_Index(`nickname`, `account`, `created_time`);

      4). 创建全文索引

      ALTER TABLE `user` ADD FULLTEXT(message);

      使用时

      SELECT * FROM `user` WHERE MATCH(message) AGAINST(‘关键字1′, ‘关键字2′, ‘关键字3′...);

    5. 那么这些索引什么时候起作用?

      1). where后面的列字段上。
      2). group by、order by、distinct后面的列字段上。
      3). join联表后面的列字段上。

    6. 什么时候又会导致索引失效呢?

      1). 列运算,添加索引的列如果参与了函数运算。

      2). 添加索引的列含有NULL值。

      3). like后紧跟'%'。

      4). 组合索引未完全匹配最左原则时。

    7. 什么样的列不建议创建索引呢?

      1). 不经常参与条件匹配的列。

      2). 该列的数据是类似枚举型的,则意义不大。

      3). 该列的数据类型是text、image、bit类型的。

    欢迎看官儿们留言补充和指正,谢谢下次见!

  • 相关阅读:
    MongoDB Replica Set 选举过程
    转 Warning:MongoDB Replica Sets配置注意事项
    mongodb与内存
    mongodb的监控与性能优化
    php 5.5.1 编译安装过程
    java知识点积累(一)
    java内存及数据区
    static及静态方法
    接口和抽象类
    Java SE自学阶段的笔记整理
  • 原文地址:https://www.cnblogs.com/chenyixun/p/12994980.html
Copyright © 2011-2022 走看看