使用“like"优化 MySQL 搜索和通配符

Optimization of MySQL search using quot;likequot; and wildcards(使用“like优化 MySQL 搜索和通配符)
本文介绍了使用“like"优化 MySQL 搜索和通配符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何查询像

SELECT * FROM sometable WHERE somefield LIKE '%value%'

要优化吗?

这里的主要问题是阻止 DBMS 使用索引的第一个通配符.

The main issue here is the first wildcard which prevents DBMS from using index.

此外,somefield 值是纯字符串(不是一段文本),因此无法执行全文搜索.

What is more, somefield value is solid string (not a piece of text) so fulltext search could not be performed.

推荐答案

两种方式:

(1) 使用内存表,所以速度非常快.

(1) use an in-memory table so it goes very fast.

(2) 编写比 foo LIKE '%bar%' 更好的索引和搜索算法.如果不了解您的问题,就无法就此提出任何建议.

(2) cook up a better index and search algorithm than foo LIKE '%bar%'. It's not possible to make any suggestions about this without knowing more about your problem.

正如您所指出的,%bar% 模式保证每次查找都进行表扫描,这使数据库软件中任何可能的搜索独创性无效.

As you have pointed out, the %bar% pattern guarantees a table-scan for every lookup, which nullifies any possible search ingenuity in the database software.

这篇关于使用“like"优化 MySQL 搜索和通配符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)