全文搜索分类: 英文全文搜索和中文全文搜索
一、英文全文搜索的实现
方案:
创建数据库中的表时,对于需要进行搜索的字段建立FULLTEXT索引,查询过程中使用MATCH进行搜索。
备注:mysql停止词的解决方案,自定义mysql的停止词:
MySQL全文搜索有一些停止词,如:the, this, to等,像下面的这条语句将搜索不到东西:
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
如果你一定要想搜索他们,你需要自定停止词,方法如下:
change your my.ini like this:
[mysqld]
ft_min_word_len=3
ft_stopword_file="C:\\MySQL\\stop.txt"
二、中文全文搜索的实现
方案:
1. 将中文映射为汉语拼音,汉语拼音之间用空格分隔,这样每个拼音就相当于一个英文单词,就可以使用MySQL的全文搜索功能。
2. 进行中文分词处理,开发MySQL的全文检索分词插件。
参考文献: http://blog.sina.com.cn/s/blog_4b3c9085010005hd.html
mysql书写规则:
1、利用mysql中频繁查询之缓存功能
实现方案:书写sql语句时,不能使用NOW() 和 RAND()等这种函数,其会导致频繁查询不缓存。
2、检测mysql语句:在执行sql前加上EXPLAIN关键字。
3、限定条件limit的实用性:当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数。
4、避免 SELECT*:会浪费不必要的资源。
5、把IP地址存成 UNSIGNED INT
6、垂直分割:是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
7、使用一个对象关系映射器(ObjectRelational Mapper)
8 、事务: 事物以 BEGIN 关键字开始, COMMIT 关键字结束。在这之间的一条 SQL 操作失败,那么, ROLLBACK 命令就可以把 数据库 恢复到 BEGIN 开始之前的状态。