如果我每次用户提交表单时都在我的ODBC数据库中存储HTML TEXTAREA,那么SELECT要检索的语句是什么?1)包含给定子字符串的所有行2)所有不包含子行的行(并且是搜索区分大小写的? )
编辑:如果LIKE "%SUBSTRING%"要慢,那么获取所有内容并在PHP中进行排序会更好吗?
Kon*_*rak 37
好吧,你可以随时尝试WHERE textcolumn LIKE "%SUBSTRING%"- 但这保证很慢,因为你的查询不能进行索引匹配,因为你正在寻找左侧的字符.
它取决于字段类型 - textarea通常不会保存为VARCHAR,而是保存为(某种)TEXT字段,因此您可以使用MATCH AGAINST运算符.
要获得不匹配的列,只需将NOT放在前面:WHERE textcolumn NOT LIKE "%SUBSTRING%".
搜索是否区分大小写取决于您如何存储数据,尤其是您使用的COLLATION.默认情况下,搜索将不区分大小写.
我说,做一个WHERE field LIKE "%value%"比慢WHERE field LIKE "value%",如果列字段有索引,但是这仍然不是让所有的价值和让你的应用程序过滤器相当快.两种情况都是:
1 /如果你这样做SELECT field FROM table WHERE field LIKE "%value%",MySQL会扫描整个表,并只发送含有"价值"的领域.
2 /如果你这样做SELECT field FROM table,然后在里面有你的应用程序(在你的情况PHP)与"价值"只过滤行,MySQL也将扫描整个表,但把所有的字段PHP,然后必须做额外的工作.这比案例#1慢得多.
解决方案:请使用该WHERE子句,并使用EXPLAIN查看性能.
有关MySQL全文搜索的信息.这仅限于MyISAM表,因此如果要使用其他表类型,可能不适用.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
即使WHERE textcolumn LIKE "%SUBSTRING%"速度很慢,我认为让数据库处理它而不是让PHP处理它可能更好.如果可以通过某些其他条件(日期范围,用户等)限制搜索,那么您可能会发现子字符串搜索正常(ish).
如果要搜索整个单词,可以将所有单个单词拉出到单独的表中,并使用它来限制子字符串搜索.(因此,当搜索"我的搜索字符串"时,您会查找最长的单词"搜索",只对包含"搜索"一词的记录进行子字符串搜索)