社区
MySQL
帖子详情
求关于mysql InnoDB引擎 模糊查询的解决思路
qqwx_1986
2010-04-26 01:52:16
mysql
ENGINE=InnoDB
数据量可能会达到百万级
如果有模糊查询的需求,一般怎样解决?
建立一般索引肯定是没有作用的
这个问题困扰我很久了,把这个字段提取出来另开一个表?好像也没啥效果
给出好的思路另开贴加分
...全文
351
15
打赏
收藏
求关于mysql InnoDB引擎 模糊查询的解决思路
mysql ENGINE=InnoDB 数据量可能会达到百万级 如果有模糊查询的需求,一般怎样解决? 建立一般索引肯定是没有作用的 这个问题困扰我很久了,把这个字段提取出来另开一个表?好像也没啥效果 给出好的思路另开贴加分
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
innodb
大数据表 count 业务优化
背景:
MySQL
版本:8.0.15 A表数据量:2600万+,分区32个,
innodb
引擎
背景介绍: 由于A表是记录数最大的数据表,由上线之初的100万数据,迅速增长到500万、1000万,现在数据量在2600万左右。预计未来1年内增长到1亿+。 运营管理端对A表有数据列表、条件匹配查询、分页的业务功能。 A表数据量在100万时,没有出现性能问题。 A表数据量涨到500万时,获取匹配条件记...
MySQL
中like
模糊查询
如何优化?
MySQL
中like
模糊查询
如何优化?
MySQL
56,940
社区成员
56,757
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章