一个面试题

for_dream 发布于 02/28 16:11
阅读 3K+
收藏 0

前两天面试遇到一个问题,一张表里面有30个列需要模糊查询,如何提高查询效率

百思不得其解,往各位大神帮忙看看

以下是话题补充:

@for_dream:补充下,是多列同时模糊查询,单纯拼接是不行的 (02/28 16:39)
加载中
1
蚊子710
蚊子710

一个条件的话,concat可以用一下,数据量多的话考虑全文检索。多个条件的话,分表?

1
不要说no

加入elasticsearch呗

1
Tuesday
Tuesday

这不是面试题, 这是赶你走的题. 

for_dream
for_dream
-_-
0
君千殇520
君千殇520

CONCAT吧,主要还是要看查询的变量是只有一个,还是每列算一个。还有数据量问题,就要考虑加入索引

0
公孙二狗
公孙二狗

设计出这个需求的人大家给个代号吧: <placeholder/>

0
dimdim
dimdim

concat拼接字符串有什么用?不懂了?

dimdim
dimdim
你们是不是搞错了,30个字段不同的内容模糊查询(滑稽脸)
0
畅想的杨海天
畅想的杨海天

看有多少个查询条件,如果只有一个条件,那搞个索引就行了

0
b
bingtel

应该可以分表了吧?

0
developan
developan

把30列的字段concat到一个新的字段,然后给这个字段加全文索引。

同时查30个列,这样的设计有问题。可以用全文搜索引擎实现,比如: Elasticsearch

0
z
zhjh

数据量不是超大,而且必须rdbms的话,每个列建索引,然后查询的时候动态拼接sql,确保执行计划走mysql: index_merge ,oracle:and-equal。

z
zhjh
回复 @for_dream : 主从啊,从库建索引就好了,既然全部字段like,RDBMS一定读写分离了。不然就需要基于binlog同步到ES中去了。
for_dream
for_dream
回复 @zhjh : 哥,你查询速度是上来了,增删就不管啦?
z
zhjh
回复 @for_dream : 就算是N个列同时作为查询条件,可以确保所有索引同时并行扫描啊,除了CPU负载高点,速度很快上来了。
z
zhjh
回复 @for_dream : 为什么不行?
for_dream
for_dream
这是面试题,不是真实需求,建索引肯定不行
返回顶部
顶部