`

创建索引、修改索引、删除索引的命令语句

 
阅读更多
MySQL 添加列,修改列,删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义。

查看列:desc 表名;
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);
删除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table bbb change nnnnn hh int;
修改列名SQLServer:exec sp_rename't_student.name','nn','column';
修改列名Oracle:lter table bbb rename column nnnnn to hh int;
修改列属性:alter table t_book modify name varchar(22);
sp_rename:SQLServer 内置的存储过程,用与修改表的定义。
=============================

创建索引、修改索引、删除索引的命令语句
2012-05-07 11:53:09 | 1671次阅读 | 评论:0 条 | itokit  mysql索引学习----2----创建索引、修改索引、删除索引的命令语句
查看表中已经存在 index:show index from table_name;

创建和删除索引
索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。删除索引可以利用ALTER TABLE或DROP INDEX语句来实现。

(1)使用ALTER TABLE语句创建索引。
语法如下:
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) ;
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式,table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。
创建索引的示例如下:
mysql> use tpsc
Database changed
mysql> alter table tpsc add index shili (tpmc ) ;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0

(2)使用CREATE INDEX语句对表增加索引。
能够增加普通索引和UNIQUE索引两种。其格式如下:
create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;
说明:table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

(3)删除索引。
删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
其中,在前面的两条语句中,都删除了table_name中的索引index_name。而在最后一条语句中,只在删除PRIMARY KEY索引中使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。
如果从表中删除某列,则索引会受影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。
删除索引的操作,如下面的代码:
mysql> drop index shili on tpsc ;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
该语句删除了前面创建的名称为“shili”的索引。




===========================================

MYSQL索引无效和索引有效的详细介绍,需要的朋友可以参考一下
1、WHERE字句的查询条件里有不等于号(WHERE column!=...),MYSQL将无法使用索引
2、类似地,如果WHERE字句的查询条件里使用了函数(如:WHERE DAY(column)=...),MYSQL将无法使用索引
3、在JOIN操作中(需要从多个数据表提取数据时),MYSQL只有在主键和外键的数据类型相同时才能使用索引,否则即使建立了
索引也不会使用
4、如果WHERE子句的查询条件里使用了比较操作符LIKE和REGEXP,MYSQL只有在搜索模板的第一个字符不是通配符的情况下才能
使用索引。比如说,如果查询条件是LIKE 'abc%',MYSQL将使用索引;如果条件是LIKE '%abc',MYSQL将不使用索引。
5、在ORDER BY操作中,MYSQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。尽管如此,在涉及多个数据表的查
询里,即使有索引可用,那些索引在加快ORDER BY操作方面也没什么作用。
6、如果某个数据列里包含着许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含了净是
些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。

7、索引有用的情况下就太多了。基本只要建立了索引,除了上面提到的索引不会使用的情况下之外,其他情况只要是使用在
WHERE条件里,ORDER BY 字段,联表字段,一般都是有效的。 建立索引要的就是有效果。 不然还用它干吗? 如果不能确定在


=================================

MySQL索引类型一览 让MySQL高效运行起来
2009-10-15 17:51 佚名 网络转载 字号:T | T
一键收藏,随时查看,分享好友!
本文介绍了七种MySQL索引类型。在数据库表中,对字段建立索引可以大大提高查询速度。通过善用这些索引,可以令MySQL的查询和运行更加高效。
AD:51CTO学院:IT精品课程在线看!
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。

在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:

CREATE TABLE mytable( 

ID INT NOT NULL,  

username VARCHAR(16) NOT NULL

); 

我们随机向里面插入了10000条记录,其中有一条:5555, admin。

在查找username="admin"的记录 SELECT * FROM mytable WHERE username='admin';时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

MySQL索引类型包括:

(1)普通索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

◆创建索引

CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。

◆修改表结构

ALTER mytable ADD INDEX [indexName] ON (username(length))
◆创建表的时候直接指定

CREATE TABLE mytable( 

ID INT NOT NULL,  

username VARCHAR(16) NOT NULL, 

INDEX [indexName] (username(length)) 

); 
删除索引的语法:

DROP INDEX [indexName] ON mytable;
(2)唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

◆创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))
◆修改表结构

ALTER mytable ADD UNIQUE [indexName] ON (username(length))
◆创建表的时候直接指定

CREATE TABLE mytable( 

ID INT NOT NULL,  

username VARCHAR(16) NOT NULL, 

UNIQUE [indexName] (username(length)) 

); 
(3)主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE TABLE mytable( 

ID INT NOT NULL,  

username VARCHAR(16) NOT NULL, 

PRIMARY KEY(ID) 

); 
当然也可以用 ALTER 命令。记住:一个表只能有一个主键。

(4)组合索引

为了形象地对比单列索引和组合索引,为表添加多个字段:

CREATE TABLE mytable( 

ID INT NOT NULL,  

username VARCHAR(16) NOT NULL, 

city VARCHAR(50) NOT NULL, 

age INT NOT NULL

); 
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);
建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。

如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。

建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:

usernname,city,age 

usernname,city 

usernname 
为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:

SELECT * FROM mytable WHREE username="admin" AND city="郑州"

SELECT * FROM mytable WHREE username="admin"
而下面几个则不会用到:

SELECT * FROM mytable WHREE age=20 AND city="郑州"

SELECT * FROM mytable WHREE city="郑州"
(5)建立索引的时机

到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。例如:

SELECT t.Name

FROM mytable t LEFT JOIN mytable m  

ON t.Name=m.username WHERE m.age=20 AND m.city='郑州'
此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也有对它建立索引的必要。

刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:

SELECT * FROM mytable WHERE username like'admin%'
而下句就不会使用:

SELECT * FROM mytable WHEREt Name like'%admin'
因此,在使用LIKE时应注意以上的区别。

(6)索引的不足之处

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:

◆虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。

索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

(7)使用索引的注意事项

使用索引时,有以下一些技巧和注意事项:

◆索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

◆使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

◆索引列排序

MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

◆like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

◆不要在列上进行运算

select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

select * from users where adddate<‘2007-01-01’; 
◆不使用NOT IN和<>操作



分享到:
评论

相关推荐

    数据库 创建索引 sql oracle

    * 用 Transact-SQL 语句创建索引:使用 CREATE INDEX 语句创建索引,例如 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ...n ] ) [ WITH [PAD_...

    MySQL数据库:创建索引.pptx

    使用CREATE INDEX语句可以在一个已有表上创建索引,一个表可以创建多个索引。 语法格式: CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: UNIQUE:表示创建的是唯一性索引 ...

    mysql中创建各种索引的语句整理.pdf

    Mysql中创建各种索引的语句整理 代码 添加PRIMARY KEY(主键索引) 添加UNIQUE(唯一索引) 添加INDEX(普通索引) 添加FULLTEXT(全文索引) 添加多列索引 ) mysql&gt;ALTER TABLE `...

    oracle在线创建索引和重组索引

    在线创建索引可以提高查询性能,但是需要评估该索引的必要性和可能对现有语句的影响。如果不是紧急的大索引,最好在维护时间操作。创建索引前,需要评估索引的大小、表空间剩余空间的大小和临时表空间大小是否足够。...

    SQLserver索引创建语句.txt

    SQLserver索引创建语句

    创建索引对SQL语句执行的影响.pdf

    创建索引对SQL语句执行的影响 创建索引对SQL语句执行的影响是Oracle数据库中一个重要的性能调整技术。索引的创建可以提高SQL语句的执行速度,但是它对已经在执行中的SQL语句不会产生影响。下面我们将详细讨论创建...

    MySQL创建索引,查看以及删除

    创建索引虽然能提升查询速度,但也会占用额外的存储空间,并可能降低插入、更新和删除操作的性能。因此,合理设计和使用索引至关重要。以下是一些优化策略: 1. 选择合适的索引类型:根据查询需求选择适当的索引...

    MySQL 创建索引(Create Index)的方法和语法结构及例子

    CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON ... HASH | RTREE} 代码如下: — 创建无索引的表格 create table testNoPK ( id int not null, name varchar(10) ); — 创建

    [Oracle]如何在亿级记录表中创建索引

    ### Oracle中亿级记录表创建索引的知识点详解 #### 一、背景介绍 在Oracle数据库中处理亿级数据量的表时,合理的索引设计是优化查询性能的关键因素之一。索引能够加快数据检索的速度,减少I/O操作次数,但同时也...

    oracle、sql数据库批量建索引

    使用`CREATE INDEX`语句创建索引,而`DROP INDEX`用于删除。在批量操作时,可以结合T-SQL和存储过程,或者使用SQL Server Management Studio(SSMS)的脚本功能来生成和执行批量操作的脚本。 然而,创建索引并非...

    索引的SQL语句优化

    7. **索引提高数据分布不均匀时查询效率**:在数据分布不均匀的列上创建索引,可以显著提高查询效率,尤其是对于那些具有大量重复值的列。 8. **利用HINT强制指定索引**:在某些情况下,可能需要强制数据库使用特定...

    创建索引对SQL语句执行的影响.doc

    综上所述,创建索引对SQL语句执行的影响是多方面的。它可以显著提高查询速度,但也可能增加写操作的开销,影响存储空间,并且需要合理的索引设计和维护。在实际应用中,应根据数据量、查询模式、业务需求以及资源...

    创建索引和调优索引

    创建索引的方式多样,可以直接通过SQL Server Management Studio,也可以通过编写SQL语句如`CREATE INDEX`来创建。同时,定义主键或唯一性约束也会自动创建索引。然而,索引并非全无缺点,它们需要额外的存储空间,...

    索引和视图的创建和修改

    - **使用SQL语句创建索引**: - **非唯一非聚集索引**: ```sql CREATE INDEX index_name ON table_name (column_name); ``` - **唯一非聚集索引**: ```sql CREATE UNIQUE INDEX index_name ON table_name ...

    Mysql数据库索引创建、索引删除、索引失效场景详解

    除了创建索引,索引管理还包括删除。在MySQL中,可以使用`DROP INDEX`语句来删除索引。但是,需要注意的是,如果索引与主键关联,必须先删除主键,再删除主键索引。 索引的失效场景包括:更新或删除索引列,使用不...

    MySQL数据库:使用NAVICAT工具创建和管理索引.pptx

    如果需要修改索引,比如更改索引类型或添加/删除索引列,可以先删除旧的索引,再按照上述方法创建新的索引。删除索引后,记得检查对表的影响,确保不会降低查询性能。 3. **删除索引**: 要删除不再需要的索引,...

    SQL语句索引优化_sql索引降龙十八掌(Oracle)

    - 函数索引:基于函数结果创建索引,支持更复杂的查询条件。 二、选择合适的索引策略 1. 单列索引:针对单个列创建的索引,适合频繁的等值查询。 2. 复合索引:包含多个列,适用于多列联合查询。 3. 唯一索引:...

    Oracle为sdo_geometry创建空间索引

    可以使用以下语句查看创建的空间索引: ```sql SELECT * FROM user_sdo_index_metadata; ``` 这将显示当前数据库中的所有空间索引信息。 四、 删除空间索引 删除空间索引的语句如下: ```sql DROP INDEX spatial_...

    什么是索引?如何创建索引,索引的类型

    在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX 或 ALTER TABLE来为表增加索引。 1.ALTER TABLE可以用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。 2.CREATE INDEX可对表增加普通索引或UNIQUE...

    Oracle索引的访问方法,如何创建索引、查询索引、使用索引

    Oracle索引的访问方法和创建索引的知识点 Oracle索引的访问方法是一种数据库优化技术,旨在提高查询速度和数据检索效率。索引是一种数据结构,它可以快速定位和检索数据库中的数据。Oracle索引的访问方法包括创建...

Global site tag (gtag.js) - Google Analytics