mysql有没有比not like '%字符串%'更效率的方法,或者怎么改变数据结构更好。

 比如表A是城市表,有世界上所有城市,B1是人名,A1和B1都有几万到几十万条数据。李四去过北京,东京,纽约就记录下来。现在我们想知道谁没去过北京,用的 not like '%[1]%'的方式,我觉得这样设计是不对的,而且因为查询频繁,CPU占用非常高,但是没有好的思路。考虑过新建一个表,存放姓名和城市,一行一个,每个人去过一个地方就增加一行记录,这样的话,当有20万人,5万人去过北京,查询没去过北京的好像效率也很低。主要是查询太过频繁。

A
IDcity
1北京
2东京
3纽约
4伦敦

 

 

 

 

 

 

B
name

list_id

李四[1],[2],[3]

张三

[1]
王五[4],[1]
赵一[3],[1],[2]

20万条信息,不至于慢吧?就算是排序也不会那样。但是按照编程序的步骤来说,就算什么不做,要把所有数据显示出来一次,那至少都是o(n)时间。你觉得慢的原因,可能是因为你上面所说的查询频繁,对于这个,你看看弄个缓存页行不行

FIND_IN_SET('b','a,b,c,d');