在sql或oracle等数据库中字符串相等查询的时间复杂度是多少?

时间:2018-04-23 14:30:28

标签: sql oracle11g

假设我有一个包含字符串条目的数据库,我需要查找某个字符串,比如“gamma”。如果我通过此查询搜索特定字符串,那么时间复杂度会是多少:

SELECT * FROM TABLE WHERE NAME='GAMMA'

有更快或更有效的方法吗?如果我存储字符串的SHA256会更好吗,因为即使字符串很大也会确保固定大小(假设字符串比较是根据O(字符串的长度)发生的?

假设只有唯一的字符串条目。

1 个答案:

答案 0 :(得分:1)

这在SQL中是一个非常无意义的问题。可以通过多种不同方式处理此查询:

  • 进行全表扫描
  • (name)或名称上使用索引是任何索引的第一列,后跟行查找
  • 如果name是分区列,则执行部分表扫描
  • 如果表是索引组织表,则执行二进制搜索

这些变化和复杂性。

在考虑SQL查询的性能时,通常需要考虑集合所需的I / O操作,以及特定操作的复杂性。也就是说,有些操作非常昂贵,所以有时你需要考虑到这一点。相对较短的字符串上的字符串比较不是这些操作之一。

如果你有大字符串,那么散列字符串可能是一个有用的优化 - 特别是对于比较不同行中的字符串。但是,它以查询复杂性为代价。索引通常足以用于此操作。