ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

练习6:创建索引

2019-08-29 16:01:47  阅读:435  来源: 互联网

标签:table2 index 创建 练习 索引 mysql test table


案例:创建数据库index_test,按照下表的结构在index_test数据库中创建两个数据表test_table1和test_table2,并按照操作过程完成对数据表的基本操作。

(1)登录MySQL数据库
(2)创建数据库index_test
(3)创建表test_table1
(4)创建表test_table2,存储引擎为MyISAM
(5)使用alter table 语句在表test_table2的birth字段上建立名称为ComDateIdx的普通索引
(6)使用alter table语句在表test_table2的id字段上添加名称为UniqIdx2的唯一索引,并以降序排列
(7)使用create index 在firstname、middlename和lastname三个字段上建立名称为MultiColidx2的组合索引
(8)使用create index在title字段上建立名称为FTidx的全文索引
(9)使用alter table语句删除表test_table1中名称为Uniqidx的唯一索引
(10)使用drop index语句删除表test_table2中名称为MultiColidx2的组合索引
几个注意点


(1)登录MySQL数据库
C:\Users\Hudie>mysql -h localhost -u root -p
Enter password: *******
(2)创建数据库index_test
mysql> create database index_test;
Query OK, 1 row affected (0.06 sec)

mysql> use index_test;
Database changed
(3)创建表test_table1
mysql> create table test_table1
    -> (
    -> id int not null primary key auto_increment,
    -> name char(100) not null,
    -> address char(100) not null,
    -> description char(100) not null,
    -> unique index uniqidx(id),
    -> index MultiColidx(name(20),address(30) ),
    -> index Comidx(description(30))
    -> );
Query OK, 0 rows affected (0.11 sec)

mysql> show create table test_table1 \G
*************************** 1. row ***************************
       Table: test_table1
Create Table: CREATE TABLE `test_table1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(100) NOT NULL,
  `address` char(100) NOT NULL,
  `description` char(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniqidx` (`id`),
  KEY `MultiColidx` (`name`(20),`address`(30)),
  KEY `Comidx` (`description`(30))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.06 sec)

可以看到在test_table表中成功创建了3个索引,分别是在id字段上名称为uniqidx的唯一索引;在name和address字段上的组合索引;在description字段上长度为30的普通索引。

(4)创建表test_table2,存储引擎为MyISAM
mysql> create table test_table2
    -> (
    -> id int not null primary key auto_increment,
    -> firstname char(100) not null,
    -> middlename char(100) not null,
    -> lastname char(100) not null,
    -> birth date not null,
    -> title char(100) null
    -> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.07 sec)
(5)使用alter table 语句在表test_table2的birth字段上建立名称为ComDateIdx的普通索引
mysql> alter table test_table2 add index ComDateidx(birth);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0
(6)使用alter table语句在表test_table2的id字段上添加名称为Uniqidx2的唯一索引
mysql> alter table test_table2 add unique index Uniqidx(id);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0
(7)使用create index 在firstname和middlename两个字段上建立名称为 MultiColidx2的组合索引
mysql>  create index MultiColidx2 on test_table2(firstname,middlename);
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
(8)使用create index在title字段上建立名称为FTidx的全文索引
mysql> create fulltext index ftidx on test_table2(title);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0
(9)使用alter table语句删除表test_table1中名称为Uniqidx的唯一索引
mysql> alter table test_table1 drop index uniqidx;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0
(10)使用drop index语句删除表test_table2中名称为MultiColidx2的组合索引
mysql> drop index MultiColidx2 on test_table2;
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
几个注意点:

1.索引对数据库的性能如此重要,如何使用它?

  • 如果索引列较少,则需要的磁盘空间和维护开销都较少。
  • 如果在一个大表上创建了多种组合索引,索引文件也会膨胀很快。另外索引较多,可覆盖更多的查询。
  • 尝试添加、删除、修改索引,不影响数据库架构或应用程序设计。

2.尽量使用短索引

  • 对字符串类型的字段进行索引,如果可能应该指定一个前缀长度。例如,有一个char(255)的列,如果在前 10或30个字符内多数值是唯一的,就不需要对整个列进行索引。
  • 短索引不仅可以提高查询速度,也能节省磁盘空间、减少I/O操作。

标签:table2,index,创建,练习,索引,mysql,test,table
来源: https://blog.csdn.net/weixin_43691058/article/details/100135014

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有