社区
MySQL
帖子详情
求关于mysql InnoDB引擎 模糊查询的解决思路
qqwx_1986
2010-04-26 01:52:16
mysql
ENGINE=InnoDB
数据量可能会达到百万级
如果有模糊查询的需求,一般怎样解决?
建立一般索引肯定是没有作用的
这个问题困扰我很久了,把这个字段提取出来另开一个表?好像也没啥效果
给出好的思路另开贴加分
...全文
384
15
打赏
收藏
求关于mysql InnoDB引擎 模糊查询的解决思路
mysql ENGINE=InnoDB 数据量可能会达到百万级 如果有模糊查询的需求,一般怎样解决? 建立一般索引肯定是没有作用的 这个问题困扰我很久了,把这个字段提取出来另开一个表?好像也没啥效果 给出好的思路另开贴加分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
boy
2010-04-29
打赏
举报
回复
[Quote=引用 14 楼 crazylaa 的回复:]
另外建个表,采用MYISAM,建full text,专门用来针对这个模糊查询,采用id对应。
或者改Engine
[/Quote]
呵呵,怎么跟我想的一样!
boy
2010-04-27
打赏
举报
回复
再想想,当然是还有办法的!呵呵
qqwx_1986
2010-04-27
打赏
举报
回复
[Quote=引用 9 楼 tx18 的回复:]
有两个办法解决:
一是放弃这个想法;
二是投入资金建立一个综合的全文检索系统。
百万级数据用MySQL做全文检索基本上已经是上限,比较可靠的是在八十万左右,当然还有硬件因素;可以采用集成方法来做,比如MySQL+Lucene、MySQL+Sphinx等。这些工作都不轻松,如果能基本做成,就可以直接来我们这儿上班!
[/Quote]
这个工程太大了,这种需求有,但是不多,我也不是专业搞查询的,只是个游戏数据库中的物品而已,由于游戏的特殊性后面的数据量可能会比较大,所以才不想随便写个like查询
qqwx_1986
2010-04-27
打赏
举报
回复
[Quote=引用 10 楼 wwwwa 的回复:]
引用 6 楼 qqwx_1986 的回复:
根据物品名称(最长8个汉字utf8编码)查物品表,要求查出所有名字中有用户输入的查询条件
比如 用户查询“裤子”
那么 以下数据都应该被查询出来:
1. 小明的裤子
2. 裤子很漂亮
3. 好漂漂的裤子啊
1、改变表类型,比如 MYISAM;
2、用INSTR、FIND_IN_SET这类函数
[/Quote]
由于要用到事务,所以开始就规定全部的表都为 InnoDB,其实我也想用MYISAM
看样子这种需求只能针对它本身的特点做一定的优化了
WWWWA
2010-04-27
打赏
举报
回复
[Quote=引用 6 楼 qqwx_1986 的回复:]
根据物品名称(最长8个汉字utf8编码)查物品表,要求查出所有名字中有用户输入的查询条件
比如 用户查询“裤子”
那么 以下数据都应该被查询出来:
1. 小明的裤子
2. 裤子很漂亮
3. 好漂漂的裤子啊
[/Quote]
1、改变表类型,比如 MYISAM;
2、用INSTR、FIND_IN_SET这类函数
crazylaa
2010-04-27
打赏
举报
回复
另外建个表,采用MYISAM,建full text,专门用来针对这个模糊查询,采用id对应。
或者改Engine
boy
2010-04-27
打赏
举报
回复
有两个办法解决:
一是放弃这个想法;
二是投入资金建立一个综合的全文检索系统。
百万级数据用MySQL做全文检索基本上已经是上限,比较可靠的是在八十万左右,当然还有硬件因素;可以采用集成方法来做,比如MySQL+Lucene、MySQL+Sphinx等。这些工作都不轻松,如果能基本做成,就可以直接来我们这儿上班!
rucypli
2010-04-26
打赏
举报
回复
那就更改表结构成myisam的然后建立全文索引
shine333
2010-04-26
打赏
举报
回复
如果商品是管理人员添加,可以考虑增加category或者tag表,部分替代模糊查询的作用。如果客户选择了“查看全部”,再进行模糊查询
qqwx_1986
2010-04-26
打赏
举报
回复
根据物品名称(最长8个汉字utf8编码)查物品表,要求查出所有名字中有用户输入的查询条件
比如 用户查询“裤子”
那么 以下数据都应该被查询出来:
1. 小明的裤子
2. 裤子很漂亮
3. 好漂漂的裤子啊
ACMAIN_CHM
2010-04-26
打赏
举报
回复
如果没有更多的信息,则没有什么更好的办法了。 like '%xxx%' 这种无索引可以利用。 除非你的应用有些什么特点,或者可以从表的设计上来找出方法。可惜你无法给出关于应用方面的介绍。所以泛泛谈, like '%xxx%' 无提高的方案。
WWWWA
2010-04-26
打赏
举报
回复
举例说明你的要求
qqwx_1986
2010-04-26
打赏
举报
回复
就是针对某个字段部分匹配 前面,中间,后面 都有可能部分匹配就行
这需求我知道有点变态
ACMAIN_CHM
2010-04-26
打赏
举报
回复
innodb, 则没有办法,目前只有myisam 支持全文索引。
你的模糊查询需要具体是什么样的? 只有分析你的具体需求才能去设计是否有新方案以提高效率。
iihero
2010-04-26
打赏
举报
回复
你好像是要一个full text索引,查查这方面的资料就行了。
MySQL
InnoDB
存储原理深入剖析与技术分析
每个PageSize 16kB,每页至少存2条数据,页内单行数据最大8kb,超出8kb后会存在溢出表,超出的部分放到溢出页中(称之为【行溢出】,当某一行数据过大,导致数据页存放不下时,我们把这种情况叫做行溢出,简单的
解决
方式就是把记录存储在溢出页(磁盘的其它空闲地方)中)优化:避免热数据被淘汰,(访问时间+频率)、(两个LRU表:一个热数据的LRU表,一个冷数据的LRU表,只淘汰冷数据的LRU表,热数据转冷,冷数据转热);主键(key)大小,主键(key)越小,每页16k存的数据越多,树的层级越小。
MySQL
进阶学习笔记(包括
MySQL
的存储
引擎
、索引、SQL优化、视图、存储过程、触发器、锁
InnoDB
引擎
和
MySQL
管理)的相关内容详细版
存储
引擎
就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储
引擎
是基于表的,而不是基于库的,所以存储
引擎
也可以被称为表类型。
MySQL
支持多种存储
引擎
,每种
引擎
适用于不同的应用场景.1. 查询建表语句-- 查询建表语句,默认存储
引擎
:
InnoDB
show create table 表名;-- 结果) ENGINE=
InnoDB
AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'
MySQL
模糊查询
优化
如果
模糊查询
的列字符个数比较多,或者总体记录数较多,建议使用搜索
引擎
来做。如果
模糊查询
的列字符个数不多且总体记录数不多,建议使用虚拟列来做。
mysql
中%前置
模糊查询
怎么优化
场景最优方案性能提升幅度固定后缀
模糊查询
(如%abc反转字段+普通索引10~100倍(视数据量)长文本
模糊查询
(如文章内容)全文索引5~50倍固定长度后缀匹配(如后3位)预处理后缀+前缀索引10~100倍超大数据量+复杂
模糊查询
外部搜索
引擎
(Elasticsearch)100~1000倍通过预处理将无法利用索引的%前置查询,转化为可利用索引的查询,避免全表扫描。实际应用中需结合业务场景和数据量选择最合适的方案。
MySQL
innodb
大数据表 count 业务优化
背景:
MySQL
版本:8.0.15 A表数据量:2600万+,分区32个,
innodb
引擎
背景介绍: 由于A表是记录数最大的数据表,由上线之初的100万数据,迅速增长到500万、1000万,现在数据量在2600万左右。预计未来1年内增长到1亿+。 运营管理端对A表有数据列表、条件匹配查询、分页的业务功能。 A表数据量在100万时,没有出现性能问题。 A表数据量涨到500万时,获取匹配条件记...
MySQL
57,063
社区成员
56,761
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章