导航:首页 > 数据处理 > 如何建数据库索引

如何建数据库索引

发布时间:2022-03-07 04:23:35

1. 如何正确合理的建立MYSQL数据库索引

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和<>操作

2. 数据库索引的建立

查询慢可以在city上的id上加一个索引,2万条数据就查询慢,可能与你的查询sql和代码有关系,这点数据,索引不是很大区别

3. 怎么重新建立数据库索引

create index indexname on telno(telno)

其中indexname是你标注的索引名

呀是新手吧,
请参考

4. mysql数据库怎么创建索引

普通索引 添加INDEX

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

下面演示下给user表的name字段添加一个索引
mysql数据库如何创建索引
mysql数据库如何创建索引

主键索引 添加PRIMARY KEY

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
mysql数据库如何创建索引
mysql数据库如何创建索引

唯一索引 添加UNIQUE

ALTER TABLE `table_name` ADD UNIQUE ( `column` )
mysql数据库如何创建索引

全文索引 添加FULLTEXT

ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
mysql数据库如何创建索引

如何添加多列索引

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
mysql数据库如何创建索引

5. 我的这个数据库 应该怎么建立索引

如果你的表真的就是只有这么几个字段和这么多记录,那建不建索引对效率应该产生不了太大的影响。SQL全在内存里查询,速度会很快,而且你的查询语句基本都是列出所有数据,sql基本都要全表扫描了。
真正影响效率的可能是网络。

6. SQL数据库索引怎么创建

方法如下: Oracle中建立索引,会提高查询速度: create index 索引名 on 表名(列名); 例如: create index index_userid on tbl_detail(userid); 如何找数据库表的主键字段的名称

7. 数据库表如何建立索引

可以建立索引的;至于建立聚集索引或者是非聚集索引,那要看你这个时间字段的具体情况以及使用或变更频繁程度。 一般来说,适合建立聚集索引的要求:“既不能绝大多数都相同,又不能只有极少数相同”的规则。 先说说一个误区:有人认为:只要建立索引就能显着提高查询速度。这个想法是很错误的。建立非聚集索引,确实,一般情况下可以提高速度,但是一般并不会达到你想要的速度。只有在适当的列建立适当的(聚集)索引,才能达到满意的效果。 下面的表总结了何时使用聚集索引或非聚集索引(很重要)。 动作描述 使用聚集索引 使用非聚集索引 列经常被分组排序 应应 返回某范围内的数据 应 不应 一个或极少不同值 不应 不应 小数目的不同值 应 不应 大数目的不同值 不应 应 频繁更新的列 不应 应 外键列 应应 主键列 应应 频繁修改索引列 不应 应 别的就要看你的理解了。

8. 数据库索引有哪几种怎样建立索引

1、按照索引列值的唯一性,索引可分为唯一索引和非唯一索引;

create index 索引名 on 表名(列名) tablespace表空间名;

建立主键或者唯一约束时会自动在对应的列上建立唯一索引;

2、索引列的个数:单列索引和复合索引;

3、按照索引列的物理组织方式。

CREATEUNIUQE|BITMAPINDEX<schema>.<index_name>ON<schema>.<table_name>(<column_name>|<expression>ASC|DESC,<column_name>|<expression>ASC|DESC,...)TABLESPACE<tablespace_name>STORAGE<storage_settings>LOGGING||COMPRESS<nn>NOSORT|REVERSEPARTITION|GLOBALPARTITION<partition_setting>

使用USER_IND_COLUMNS查询某个TABLE中的相应字段索引建立情况

使用DBA_INDEXES/USER_INDEXES查询所有索引的具体设置情况。

在Oracle中的索引可以分为:B树索引、位图索引、反向键索引、基于函数的索引、簇索引、全局索引、局部索引等,下面逐一讲解:

一、B树索引:

最常用的索引,各叶子节点中包括的数据有索引列的值和数据表中对应行的ROWID,简单的说,在B树索引中,是通过在索引中保存排过续的索引列值与相对应记录的ROWID来实现快速查询的目的。其逻辑结构如图:

可以保证无论用户要搜索哪个分支的叶子结点,都需要经过相同的索引层次,即都需要相同的I/O次数。

B树索引的创建示例:

create index ind_t on t1(id);

注1:索引的针对字段创建的,相同字段不能创建一个以上的索引;

注2:默认的索引是不唯一的,但是也可以加上unique,表示该索引的字段上没有重复值(定义unique约束时会自动创建);

注3:创建主键时,默认在主键上创建了B树索引,因此不能再在主键上创建索引。

二、位图索引:

有些字段中使用B树索引的效率仍然不高,例如性别的字段中,只有“男、女”两个值,则即便使用了B树索引,在进行检索时也将返回接近一半的记录。

所以当字段的基数很低时,需要使用位图索引。(“低”的标准是取值数量 < 行数*1%)

反向键索引是一种特殊的B树索引,在存储构造中与B树索引完全相同,但是针对数值时,反向键索引会先反向每个键值的字节,然后对反向后的新数据进行索引。例如输入2008则转换为8002,这样当数值一次增加时,其反向键在大小中的分布仍然是比较平均的。

反向键索引的创建示例:

createindex ind_t on t1(id) reverse;

注:键的反转由系统自行完成。对于用户是透明的。

四、基于函数的索引:

有的时候,需要进行如下查询:select * from t1 where to_char(date,'yyyy')>'2007';

但是即便在date字段上建立了索引,还是不得不进行全表扫描。在这种情况下,可以使用基于函数的索引。其创建语法如下:

create index ind_t on t1(to_char(date,'yyyy'));

注:简单来说,基于函数的索引,就是将查询要用到的表达式作为索引项。

五、全局索引和局部索引:

这个索引貌似很复杂,其实很简单。总得来说一句话,就是无论怎么分区,都是为了方便管理。

具体索引和表的关系有三种:

1、局部分区索引:分区索引和分区表1对1

2、全局分区索引:分区索引和分区表N对N

3、全局非分区索引:非分区索引和分区表1对N

创建示例:

首先创建一个分区表

createtable student

(

stuno number(5),

sname vrvhar2(10),

deptno number(5)

)

partition by hash (deptno)

(

partition part_01 tablespace A1,

partition part_02 tablespace A2

);

创建局部分区索引(1v1):

create index ind_t on student(stuno)

local(

partition part_01 tablespace A2,

partition part_02 tablespace A1

);--local后面可以不加

创建全局分区索引(NvN):

create index ind_t on student(stuno)

globalpartition by range(stuno)

(

partition p1 values less than(1000) tablespace A1,

partition p2 values less than(maxvalue) tablespace A2

);--只可以进行range分区

创建全局非分区索引(1vN)

createindex ind_t on student(stuno) GLOBAL;

9. 如何为数据库建立特定的索引

如果你是要深入数据库设计,那索引怎么建得从类型学起,如果你只是想处理目前比较棘手的查询慢的问题,有几点经验可以和你分享下

主键就是一类索引,所以没必要再建

另外常用搜索字段,比如日期,查询常会有选择一段时间的数据,对日期就可以用你自己上面设计的索引,能够加快查询速度,但前提是这个日期是被你经常用到的查询条件

如果是初学,建立索引后 你不必去研究它是如何工作的,那会比较难懂,总之建了后,系统会自动优化查询,提高速度的

10. 数据库索引怎么建立

right © 1999-2020, CSDN.NET, All Rights Reserved

程序员必备的浏览器插件
登录

越来越好ing
关注
数据库索引是什么,有什么用,怎么用 转载
2018-12-04 23:30:36
5点赞

越来越好ing

码龄2年

关注
下面是关于数据库索引的相关知识:

简单来说,数据库索引就是数据库的数据结构!进一步说则是该数据结构中存储了一张表中某一列的所有值,也就是说索引是基于数据表中的某一列创建的。总而言之:一个索引是由表中某一列上的数据组成,并且这些数据存储在某个数据结构中。

2.索引的作用。举个例子,假设有一张数据表Emplyee,该表有三列:

表中有几万条记录。现在要执行下面这条查询语句,查找出所有名字叫“Jesus”的员工的详细信息

3.如果没有数据库索引功能,数据库系统会逐行的遍历整张表,对于每一行都要检查其Employee_Name字段是否等于“Jesus”。因为我们要查找所有名字为“Jesus”的员工,所以当我们发现了一条名字是“Jesus”的记录后,并不能停止继续查找,因为可能有其他员工也叫“Jesus”。这就意味着,对于表中的几万条记录,数据库每一条都要检查。这就是所谓的“全表扫描”( full table scan)

4.而数据库索引功能索引的最大作用就是加快查询速度,它能从根本上减少需要扫表的记录/行的数量。

5.如何创建数据库索引。可以基于Employee表的两列创建索引即可:

拓展资料:

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更

阅读全文

与如何建数据库索引相关的资料

热点内容
涂料的产品怎么样 浏览:582
怎么多循环一次程序 浏览:158
大商所交易系统是什么 浏览:386
徐步天交易要多少天 浏览:21
哪个手机app可以模拟交易美股 浏览:817
爱情虚假交易是什么意思 浏览:458
番禺哪里有鲜花批发市场 浏览:563
山东修正健康饮品怎么代理 浏览:786
数据比较多复制是哪个键 浏览:474
批发市场的东西为什么这么便宜 浏览:896
雪肌丽仁产品怎么样 浏览:274
怎么做麦吉丽的代理 浏览:497
产品资质证书是什么 浏览:511
百度文库为什么下载的是数据 浏览:810
快递信息如何查商家 浏览:773
铺面信息简介怎么写 浏览:561
理财基金介绍产品怎么买 浏览:41
代理网店需要哪些手续 浏览:273
怎么样发信息呢 浏览:236
罗布乐思技术困难怎么回事 浏览:822