小编Ken*_*Ken的帖子

EXISTS比COUNT(*)> 0更有效吗?

我正在使用MySQL 5.1,我的查询大致是这样的形式:

select count(*) from mytable where a = "foo" and b = "bar";
Run Code Online (Sandbox Code Playgroud)

在我的程序中,它唯一检查的是零或非零.如果我将其转换为:

select exists(select * from mytable where a = "foo" and b = "bar");
Run Code Online (Sandbox Code Playgroud)

MySQL是否足够聪明,可以在第一次搜索时停止搜索?或者是否有其他方式与MySQL通信我的意图只是找出是否有任何记录符合这一点,我不需要一个确切的计数?

mysql performance exists

28
推荐指数
3
解决办法
1万
查看次数

省略一组名称

好吧,我确定某个人,某个地方必须已经为此提出了一个算法,所以我想在我开始(重新)发明它之前我会问.

我有一个任意(用户输入)非空文本字符串的列表.每个字符串可以是任意长度(0除外),它们都是唯一的.我想将它们显示给用户,但我想将它们修剪为我决定的固定长度,并用省略号(...)替换它们中的一部分.问题是我希望所有输出字符串都是唯一的.

例如,如果我有字符串:

  • Microsoft Internet Explorer 6
  • Microsoft Internet Explorer 7
  • Microsoft Internet Explorer 8
  • Mozilla Firefox 3
  • Mozilla Firefox 4
  • 谷歌Chrome 14

然后我不想修剪字符串的末尾,因为这是独特的部分(不想显示"Microsoft Internet ..."3次),但是切出中间部分是可以的:

  • 微软... rer 6
  • 微软...... rer 7
  • 微软... rer 8
  • Mozilla Firefox 3
  • Mozilla Firefox 4
  • 谷歌Chrome 14

其他时候,中间部分可能是唯一的,我想修剪结束:

  • 公司会议纪要,2010年5月25日 - 仅供内部使用
  • 公司会议纪要,2010年6月24日 - 仅供内部使用
  • 公司会议纪要,2010年7月23日 - 仅供内部使用

可能成为:

  • 公司会议纪要,2010年5月25日......
  • 公司会议纪要,2010年6月24日......
  • 公司会议纪要,2010年7月23日......

我想它应该永远不会在字符串的开头进行椭圆化,即使这样也是允许的,因为这看起来很奇怪.而且我猜它可能会在字符串中超过一个位置,但在合理范围内 - 可能2次就可以了,但是3次或更多似乎过多了.或者可能的次数不如剩余的块的大小重要:椭圆之间少于约5个字符将是毫无意义的.

输入(数量和大小)都不会非常大,因此性能不是主要问题(好吧,只要算法不会尝试愚蠢的事情,就像枚举所有可能的字符串一样,直到它找到一个有效的集合!) .

我想这些要求看起来非常具体,但我实际上相当宽松 - 我只是想描述一下我的想法.

之前有过这样的事吗?是否有一些现有的算法或库可以做到这一点?我用Google搜索了一些但到目前为止没有发现任何类似的内容(但也许我只是在谷歌上搜索).我不得不相信某个人已经想要解决这个问题了!

algorithm ellipsis

9
推荐指数
1
解决办法
742
查看次数

标签 统计

algorithm ×1

ellipsis ×1

exists ×1

mysql ×1

performance ×1