两个sql查询的性能差异?

Roh*_*nga 3 mysql sql oracle performance string-matching

我的表中有一个字段有文本数据类型.

以下两个sql查询的性能是否存在差异:

 select * from tablename where fieldname="xyz%";
 select * from tablename where fieldname="%zyx";
Run Code Online (Sandbox Code Playgroud)

如果我们要实现这些查询的执行,我认为我们需要这样做:

我们必须匹配两个正则表达式(xyz*和*zyx).

我们必须从头开始检查字符串字符.

对于第一个查询,我们必须读取前三个字符以查看是否存在匹配,但对于第二个字符,我们必须读取,直到我们得到字符串的结尾以确定匹配是否已经发生.但是如果我们将字符串的长度存储在某个地方,我们可以直接读取最后三个字符,从而提供与第一种情况类似的性能.

我的问题是,像mysql和oracle这样的商业数据库是否在执行查询时表现出任何差异.

YoK*_*YoK 6

所有数据库的性能肯定存在差异.如果列被索引,第一种情况肯定会更快.

我的项目中有类似的实例,用户也可以搜索"结束"(就像你的第二个查询).

由于这是经常使用的操作和查询很慢,

  1. 我们在表中存储了反向字段名的附加列.
  2. 索引此列
  3. 每当搜索结束时,我们在这个新列中搜索:)(通过反转原始搜索字符串)

所以你的第二个查询成为:

 select * from tablename where fieldname_rev="xyz%";
Run Code Online (Sandbox Code Playgroud)

这种方法使其与查询开始一样快.