使用like算子提高查询性能

u7up0aaq  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(264)

我正在使用搜索查询查找数据库中的SKU,truesight report返回的性能很差。
我不知道有没有办法提高我的表现。
我的问题是:

public SkuQuery(final DataSource ds) {
    super(ds, "SELECT sku, description1, buyer, analyst FROM descrip WHERE item_status != 3 AND sku like ? ");
    declareParameter(new SqlParameter(Types.VARCHAR));
    compile();
}

由于类似sku的语句,它每次运行时都会执行一个可以容纳42万行的完整表。如果您重写此命令以对sku(主键)执行精确搜索,它将在.016秒内运行。
我使用的模式是“sku类似于“%5052024%”

dw1jzc5e

dw1jzc5e1#

你的问题不清楚你能不能用 = 而不是 LIKE . 用户是否不需要输入整个sku编号?
没有办法提高 LIKE 当您在模式的开头有一个通配符时。
例如,如果我让你阅读电话簿,找到所有名字中包含字符“land”的人的名字的任何地方-开头、中间或结尾-你不能利用电话簿是按名字排序的事实。你必须仔细阅读整本书才能找到符合模式的名字。
通配符就是这样工作的 LIKE 条件。除非您的模式在开始时没有通配符,否则它将被迫执行表扫描。它不能使用索引。
mysql中有全文索引,允许您匹配一个或多个字符串列中的单词。但它只匹配整个单词,不能匹配作为单词一部分的模式。
您可能会喜欢我的演示全文搜索throwdown,其中我比较了几种不同的全文索引解决方案。

tzcvj98z

tzcvj98z2#

使用如下查询

super(ds, "SELECT sku, description1, buyer, analyst FROM descrip WHERE item_status != 3");

在java代码中,在 sku ,循环检查

while([RESULT_SET-CONDITION]){
    if(sku.contains(5052024)){
        //Your Code
    }
}

尽管这样会增加主内存中的数据,因为您正在加载更多的数据。

相关问题