数据库为什么要建立索引?

一:什么是索引?

索引(Index)是帮助MySQL高效获取数据的数据结构。

二:为什么要建立索引?

一个没有索引的数据库表就相当于一本没有索引的新华字典,当你想找出其中一个汉字的时候,无异于寻找MH370碎片啊。我们为指定的字段创建索引之后,当我们根据条件查找数据的时候,数据库引擎就可以利用查找算法(二分查找法)很高效的查出来。

三:选择什么字段建立索引

索引也是要占用存储空间的,建立索引的时候也是有一定的规则可寻的。

1)选择一些经常要作为查询条件的字段。

2)选择区分度高的字段,count(distinct 字段)/count(*),当然最小就是1了,也就是唯一索引了。这个值越小,查询的效率越高。当这个值大到一定的程度的时候(具体还不是很清楚),数据库就会放弃索引进行全表扫描。你可以想象一下,如果一个表有一百万的数据,其中有一个性别的字段,这个字段只会出现两个值。然后你为该字段建了一个索引,自以为查询性能提升了N倍。其实,你就相当于把一百万条数据按照性别分别放到两个箱子里面,假设每个箱子里面有50万条性别为男的记录,因为这个箱子里面的性别都是一样的,索引也起不了任何作用了,什么二分查找也用不上了,只能用暴力算法解决咯,全表扫描咯。相反,你可以为一个人的身份证号码建立唯一索引,这样就可以从头到尾用二分查找法查找了,效率杠杠滴。



### 如何在DM数据库中创建索引时指定表空间 在DM数据库中,当需要创建索引并指定特定的表空间时,可以通过`CREATE INDEX`语句中的`TABLESPACE`子句来实现这一需求。下面是一个具体的例子: 假设有一个名为 `emp` 的表,在此表上的列 `ename` 上创建一个名为 `emp_ename` 的索引,并将其存储于名为 `USERS` 的表空间内。 ```sql CREATE INDEX emp_ename ON emp(ename) TABLESPACE USERS; ``` 对于更复杂的场景,比如想要设置更多的初始化参数,可以采用如下方式[^3]: ```sql CREATE INDEX emp_ename ON emp(ename) STORAGE ( INITIAL 50, NEXT 50 ) TABLESPACE USERS; ``` 这里不仅指定了要使用的表空间,还设置了初始分配的空间大小以及后续扩展时每次增加的空间量。 如果涉及到的是复合索引或者是唯一性约束,则语法结构保持一致。例如基于两个字段 `user_name`, `user_sex` 创建复合索引来提高查询效率的同时也放在自定义好的 `ind_student` 表空间里: ```sql create index ind_name_sex on TEST.student(user_name,user_sex) tablespace ind_student; ``` 而针对电话号码这种应该唯一的字段建立唯一索引同样适用上述方法[^4]: ```sql create unique index ind_phone on TEST.student(phone); ``` 需要注意的是,所选的表空间应当已经存在并且有足够的权限去写入数据到其中。另外,合理的规划和选择合适的表空间有助于优化性能及简化维护工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值