图像你有这样的应用程序:1个DB表,几个int字段,几个小的varchar字段,以及大约10个TEXT字段(内容变量 - 一些数据大约50个字符长,大多数大约100-200,一些大约1000,非常很少超过1000)。行数的单位是 x0 000 - x00 000。 现在,我需要有效的方法来进行这样的查询(元语言):
SELECT (1 if textfield1 LIKE %param1% ELSE 0) as r1,(1 if textfield2 LIKE %param2% ELSE 0) as r2, ... 等等,通常对于 1 个查询中的大多数文本字段(它是动态 - 可能包含其中 2 个,也可能包含全部)。
现在的问题是 - MySQL 或 MSSQL 哪个对我更好(可能的话可能是 Express,如果确实需要则升级到完整版本)?
我知道 MySQL 有很好的文本索引,您可以根据自定义的第一个字符数设置索引,因此我可以在典型场景中平衡它(如下所示: http://fernandoipar.com/2009/08/12/indexing-text-columns-in-mysql/ )
MSSQL 只有全文索引,我对此没有经验。请注意,我不需要诸如单词邻近度或类似单词之类的功能(run = ran;一些词干提取会很好,但因为数据是多语言的,所以无论如何都是不可能的)。我只需要通用的 LIKE %word% 系统,仅此而已。而且我还必须能够找到短子字符串(2 个字符)。
实际上,目标是每小时/每天运行尽可能多的此类查询(永远不会有足够的结果,因为它们应该尽可能频繁地刷新),因此请将这种效率视为要求:)
谢谢!
更新:显然没有办法使用索引来优化 LIKE %foo% 查询。所以新的问题是:有没有其他方法可以加快此类查询的速度? (请省略“购买更多内存或 SSD”之类的内容:)
最佳答案
LIKE '%foo%'
表达式无法在任何 RDBMS 中进行优化。
您需要 mysql 中的全文索引或在 sql server
I need just common LIKE %word% system
然后选择您想要的任何 DBMS,因为它们都会吸收这样的子句;-)
关于mysql - 索引文本 - MySQL 与 MS SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931797/