mysql sql语句优化的问题?

我有个商品表里面有30多万的数据,商品标题是中文,系统模糊查询的时候老是会显示慢,同时我在这个字段创建了一个普通索引;但是查询还是会慢?请教高手要如何进行优化?
select * from goods_name where title_name like "%电器%"

阅读 1.6k
avatarAI BotBETA

要优化MySQL中的模糊查询,可以考虑以下几个方面:

  1. 使用前缀索引:对于模糊查询,使用前缀索引可以显著提高查询性能。前缀索引只对字符串的前几个字符建立索引,这样可以在索引中匹配更多的查询条件,减少了需要扫描的数据量。你可以尝试创建一个前缀索引,例如:
ALTER TABLE goods_name ADD INDEX (title_name(10));

这将为title_name字段的前10个字符创建索引。

  1. 优化查询语句:尽量避免使用SELECT *,只选择你需要的字段。这样可以减少数据传输的量,提高查询速度。
  2. 考虑使用全文搜索引擎:如果你的查询需要匹配大量的文本内容,并且对匹配的准确度要求较高,可以考虑使用全文搜索引擎,如Elasticsearch。全文搜索引擎针对文本搜索进行了专门的优化,可以提供更快的查询速度。
  3. 考虑数据库分区:如果表中的数据量非常大,可以考虑使用数据库分区。将表分成多个分区可以提高查询性能和管理效率。
  4. 定期优化表:定期使用OPTIMIZE TABLE命令可以重新组织表的物理存储,提高查询性能。
  5. 调整MySQL配置:根据查询的需求和硬件配置,调整MySQL的配置参数,如缓冲区大小、连接数等,可以提高查询性能。

以上是一些常见的优化方法,你可以根据具体情况选择适合的方法进行优化。

4 个回答

如果经常使用这个查询,建议在表里添加一个字段表示商品种类,这样建立索引查询起来才会快

全文匹配这种,或者说关键词匹配,mysql 的性能 ,还是不如Elasticsearch 这种,可以用Es,match,查询性能比mysql高

1.建立的索引根本用不到(模糊匹配的索引规则 百度一下基本会有解决方案)
2.如果是只查某一类商品,给个类型字段type 这样直接查类型速度也不会慢

使用explain查一下确认是否用到了索引。mysql中使用like %{keyword}%方式十有八九不会用到索引,建议换成es+分词做索引。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题