mysql 的 like %字段% 如何优化

2016-11-04 11:10:23 +08:00
 lianxiaoyi

mysql 在 like %字段%情况下没法使用索引,现有 sql

SELECT * FROM 表 WHERE (text1=100) AND text2 LIKE "%ssss%" order by id desc LIMIT 20

在 100 多万条数据下挂了

后来改了一版

SELECT * FROM WHERE (text1=113) AND INSTR(text1, "ssss") order by id desc LIMIT 20

符合 text1 值比较少的情况下速度还行吧,但是多了之后也挂了

text1 和 text2 有联合索引

10150 次点击
所在节点    MySQL
49 条回复
wsbnd9
2016-11-07 17:08:05 +08:00
es+1
lianxiaoyi
2016-11-07 17:21:27 +08:00
@xiyangzh 好像听屌的。。。。我去写 2000 万数据看看 。。。。。。第一次玩这么大数据。。。。
NeinChn
2016-11-07 19:39:43 +08:00
@xiyangzh
我们用 ES 做到了 1 亿数据 AVG RESP 20ms
虽然 TP99 并不好看...
数据库 2kw 用主键也没见 AVG 需要 20ms 的,大概内存太小需要扫磁盘,而且硬盘不是 SSD ?就 2wk 而言很容易命中缓存的,毕竟才 2kw 数据,服务器都是 128G 内存以上。
yuedingwangji
2016-11-08 00:20:57 +08:00
@holyghost mysql 超过 100w 条就顶不住了?
lianxiaoyi
2016-11-08 09:29:28 +08:00
@NeinChn 这是一个悲伤的故事。。。我们服务器才 4G 内存。。。。。数据库用的阿里云的 RDS 。。。。。。。
lianxiaoyi
2016-11-08 09:30:49 +08:00
@yuedingwangji 100 万我估计还好 。。。。。像 like 右模糊查询或者=这种操作。。。。还是挺快的。。。。但是现在是左右模糊查询 。。。不走索引了。。。。 100 万就 TM 呵呵了。。。。
NeinChn
2016-11-08 11:19:08 +08:00
@lianxiaoyi
2333 。配置差这就很尴尬了。上 ES 也没用啊, ES 内存小的时候性能差的无法忍受。
你想想要随机读多少次磁盘....
yuedingwangji
2016-11-08 11:54:55 +08:00
@lianxiaoyi 不是吧 ,对这块不熟悉,不过我们公司 用的是 oracle ,我查询几百万的数据还是蛮快的说
lianxiaoyi
2016-11-08 12:18:20 +08:00
@NeinChn 这就尴尬了。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/317970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX