zoukankan      html  css  js  c++  java
  • 索引-mysql索引创建、查看、删除及使用示例

    mysql索引创建、查看、删除及使用示例

    1.创建索引:

    ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

    ALTER TABLE table_name ADD INDEX index_name (column_list)
    ALTER TABLE table_name ADD UNIQUE (column_list)
    ALTER TABLE table_name ADD PRIMARY KEY (column_list)

    CREATE INDEX可对表增加普通索引或UNIQUE索引。

    CREATE INDEX index_name ON table_name (column_list)
    CREATE UNIQUE INDEX index_name ON table_name (column_list)

    2.删除索引:

    DROP INDEX index_name ON talbe_name
    ALTER TABLE table_name DROP INDEX index_name
    ALTER TABLE table_name DROP PRIMARY KEY

    3.查看索引:

    mysql> show index from tblname;
    mysql> show keys from tblname;

    SQL代码在线格式化美化工具:http://tools.jb51.net/code/sqlcodeformat
    4.索引的使用场景:

    ===========================以下为索引的使用场景(sqlserver)=================================

    [1].漫谈数据库索引

    1.创建表并插入数据

    在Sql Server2008中创建测试数据库Test,接着创建数据库表并插入数据,sql代码如下:

    复制代码
    USE Test
    IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
          WHERE TABLE_NAME = 'emp_pay')
       DROP TABLE emp_pay
    GO
    USE Test
    IF EXISTS (SELECT name FROM sys.indexes 
          WHERE name = 'employeeID_ind')
       DROP INDEX emp_pay.employeeID_ind
    GO
    USE Test
    GO
    CREATE TABLE emp_pay
    (
     employeeID int NOT NULL,
     base_pay money NOT NULL,
     commission decimal(2, 2) NOT NULL
    )
    INSERT emp_pay
       VALUES (1, 500, .10)
    INSERT emp_pay 
       VALUES (2, 1000, .05)
    INSERT emp_pay 
       VALUES (6, 800, .07)
    INSERT emp_pay
       VALUES (5, 1500, .03)
    INSERT emp_pay
       VALUES (9, 750, .06)
    复制代码

    执行完上述sql代码以后我们会发现在Test数据库中多出了一张emp_pay表,数据库表的内容如下图所示:

    2.无索引查找

    从上图我们可以看出数据库中存储的数据排列顺序与我们插入的先后顺序一致。接下来我们查询employeeID=5的字段,执行如下sql代码:

    USE Test
    SELECT * FROM emp_pay where employeeID=5

    在SQL SERVER MANAGEMENT STUDIO中我们点击“显示估计的查询计划”,会出现如下图所示的查询计划图:

    其中表扫描的内容为:

    3.创建索引

    接下来我们为上述表添加聚集唯一索引,代码如下:

    SET NOCOUNT OFF
    CREATE UNIQUE CLUSTERED INDEX employeeID_ind
       ON emp_pay (employeeID)
    GO

    在执行完上述创建索引的代码以后,我们再次查询emp_pay的数据内容,如下图所示:

    从上图我们可以发现数据内容已经按照employeeID进行了排序。

    我们继续执行前面关于employeeID=5的查询,点击“显示估计的执行计划”,出现如下图所示内容:

    聚集索引查找的内容为:

    总结:

    当我们为数据库表中的某一个字段创建索引,并且在查询语句中where子句中用到这样一个字段,那么查询效率会有所提高,我们上述实验因为数据量的关系查询效率提高不明显。

    补充

    我们上面添加的索引是唯一聚集索引,因此当插入的数据在employeeID字段出现重复时会报错。假如我们在创建索引之前数据字段出现重复,那么就不能创建唯一索引。

    创建索引以后的排序(PS:2012-5-28)

    执行如下sql语句

    update emp_pay set employeeID=7 where employeeID=1;

    然后再次执行全表查询,我们发现查询结果如下所示:

    只要我们更新了employeeID,那么最后的更新结果都会按照employeeID的值进行升序排序。这是因为我们在employeeID上创建了索引的缘故。

    删除索引(PS:2012-6-4)

    我们可以通过sql server management studio这个工具删除索引,也可以通过sql语句进行索引的删除,假设我们要求删除在前面创建的索引employeeID_ind,那么sql语句如下代码所示:

    DROP INDEX employeeID_ind ON emp_pay;
  • 相关阅读:
    转载: jQuery事件委托( bind() live() delegate()) [委托 和 绑定的故事]
    转载:CPU的位数和操作系统的位数
    javascript 过滤空格
    转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)
    转载:struts标签<s:date>的使用
    转载:s:if的用法
    解决cordova-plugin-actionsheet导致Android丑陋的问题
    ionic框架对Android返回键的处理
    解决魅族手机无法连接Mac调试
    谷歌开发者大会传达的8条关键信息
  • 原文地址:https://www.cnblogs.com/super-chao/p/7754669.html
Copyright © 2011-2022 走看看