我正在使用搜索查询查找数据库中的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%”
2条答案
按热度按时间dw1jzc5e1#
你的问题不清楚你能不能用
=
而不是LIKE
. 用户是否不需要输入整个sku编号?没有办法提高
LIKE
当您在模式的开头有一个通配符时。例如,如果我让你阅读电话簿,找到所有名字中包含字符“land”的人的名字的任何地方-开头、中间或结尾-你不能利用电话簿是按名字排序的事实。你必须仔细阅读整本书才能找到符合模式的名字。
通配符就是这样工作的
LIKE
条件。除非您的模式在开始时没有通配符,否则它将被迫执行表扫描。它不能使用索引。mysql中有全文索引,允许您匹配一个或多个字符串列中的单词。但它只匹配整个单词,不能匹配作为单词一部分的模式。
您可能会喜欢我的演示全文搜索throwdown,其中我比较了几种不同的全文索引解决方案。
tzcvj98z2#
使用如下查询
在java代码中,在
sku
,循环检查尽管这样会增加主内存中的数据,因为您正在加载更多的数据。