博客
关于我
mysql中like模糊查询的优化
阅读量:344 次
发布时间:2019-03-04

本文共 1260 字,大约阅读时间需要 4 分钟。

数据库优化:解决百万级查询性能问题

在实际工作中,我们常常会遇到在百万级数据库中执行查询时的性能问题。尤其是在使用 LIKE 语句进行文本模糊查询时,查询速度往往会大打折扣。以下是我在实际工作中所采用的优化方法,希望能为大家提供一些参考。

优化方法一:精准匹配

如果你发现查询中的字段 "b" 通常以 "haha" 开头,那么可以通过在数据库表中增加索引(可以是联合索引,也可以是普通索引,具体情况具体分析)来优化查询效率。修改后的查询语句如下:

SELECT a FROM news WHERE b LIKE 'haha%' ORDER BY time LIMIT 100;

这种方法的优势在于,减少了数据库需要扫描的数据量,从而显著提升了查询速度。

优化方法二:全文索引与专用索引

如果你的数据库使用的是 MyISAM 引擎,并且无法更换数据库引擎,那么可以采取以下优化方案:

  • 将字段 "b" 设为全文索引(FULLTEXT INDEX);
  • 将字段 "time" 设为普通索引(普通索引)。
  • 修改后的查询语句如下:

    SELECT a FROM news WHERE b LIKE '%haha%' ORDER BY time LIMIT 100;

    这种方法的优势在于,通过全文索引的支持,数据库可以更高效地处理 LIKE 语句,尤其是当搜索模式较长时。

    优化方法三:分批量处理

    如果上述两种方法并不适用于你的场景,那么可以尝试将 LIKE 语句的逻辑移至应用程序层面来处理。具体来说,可以通过在 Java 程序中对数据进行分批量筛选。例如:

  • 在 Java 程序中读取数据库中的部分数据;
  • 使用 LIKE 语句进行筛选;
  • 如果筛选结果为空,则继续读取下一批数据;
  • 直到找到足够的数据或完成查询。
  • 这种方法的优势在于,通过将完整表扫描改为分批处理,可以有效减少数据库的负载压力。

    数据库查询优化建议

    在实际工作中,除了以上方法之外,还可以参考以下数据库查询优化原则:

  • 减少字段数量:在 WHERE 条件中尽量减少字段数量,尤其是大字段(如 TEXT、LONGTEXT 等)的使用。
  • 使用索引:对于常用查询字段,建议创建索引。尤其是当查询中包含在 WHERE 条件中的字段时。
  • 避免使用 LIKE:在大型数据库中,LIKE 语句通常会对性能产生较大影响。如果不必要,可以考虑替换为更高效的查询方式。
  • 使用限制条件:在 ORDER BY 和 LIMIT 语句中,尽量使用限制条件,以减少排序操作的数据量。
  • PS:大字段查询优化

    如果在查询中包含超大类型字段(如 LONGTEXT),建议采取以下优化措施:

  • 优先查询小字段:在 WHERE 条件中优先查询小字段(如 ID、日期等),然后再根据这些字段来查询大字段。
  • 避免在索引列上使用 LIKE:在使用 LIKE 运算符时,尽量避免在索引列上进行查询,这样可以减少索引覆盖的开销。
  • 通过以上方法,我们可以显著提升数据库查询性能。希望这些优化方法能为你的数据库查询效率提供帮助!

    转载地址:http://bnse.baihongyu.com/

    你可能感兴趣的文章
    npm和yarn的使用对比
    查看>>
    npm如何清空缓存并重新打包?
    查看>>
    npm学习(十一)之package-lock.json
    查看>>
    npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
    查看>>
    npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
    查看>>
    npm安装教程
    查看>>
    npm报错Cannot find module ‘webpack‘ Require stack
    查看>>
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错fatal: Could not read from remote repository
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>