oracle 数据库,如果一个列所有值都一样,建索引是不是不起作用?

如题,刚进公司,看到一个表这样处理了,是不是不起作用?而且影响插入速度吗?新人求教

你先搞明白什么是索引,和建索引的目的还在。
为毛建索引?
本质是不想走一行一行的遍历,而是根据字段的值直接找到该行。你可以理解为一个HashMap,key就是你的索引,value就是你的行。通过索引就能很快找到该行。
那么假如你的索引的字段值大量重复是什么概念?
那就是在同一个key上有大量重复的value,好比是hashmap的key是索引,value是一个数组,数组里存放了你所有值相同的行。当你查找时,根据索引找到了value,然后他并不是唯一的行,你还需要继续遍历这个数组才能找到目标行,那么还有什么意义?还不如直接数据库一行一行找来的方便,比不建索引效率还差,额外还浪费空间。
索引的目的就是希望尽可能的被索引的字段不重复,那么查找的效率就是1,如果完全重复,效率就是N,如果部分重复,那么效率会小于N,视重复量而定。
mysql的索引算法是Btree。

索引不一定是唯一所以,是可以加快查询速度的,如果数据大更要有索引,会影响插入速度。

索引是不是相当于排了个序?如果那一列值都一样排序还有用么…

这个索引应该是没有什么实用价值的。如果表中元数据修改,索引是需要维护的,会影响性能。

只要数据不完全重复(所有元组的该元素都一样),那么建立索引就是有意义的。即使当前数据完全重复,也不是不能建立索引,但是相当麻烦。
建立索引原则:“如何查就如何建”。
索引的建立,唯一的原目的就是为了加快查询(广义的查询),实际上建立索引会使得数据存储所占空间变大,有时索引所占的空间会查过数据本身的空间。索引的建立也会使得数据插入时变慢,特殊情况下,慢的难以忍受,所以DBA的重要工作之一,就是检查索引层级并优化。