每日一记--索引/过滤器
Posted znwithlc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一记--索引/过滤器相关的知识,希望对你有一定的参考价值。
打卡的时间不一定要在晚上,应该要学会灵活应对。
然后由于每天脑袋中会冒出许多其他的问题,所以也打算记下来,免得下次忘记又得去查看资料。
1、主键索引与唯一索引的区别?
一直以来都不知道主键索引与唯一索引是什么,觉得概念很模糊,所以觉得对其进行了解。
因为只对mysql比较熟悉,所以只能结合mysql进行说明。
首先我觉得对于这个问题,应该先知道在mysql中主键索引和唯一索引是什么,怎么书写?
主键索引还称为聚集索引(primary key),唯一索引(unique key)
1 create table user4 (id int auto_increment primary key,name varchar(10) unique key, address varchar(20) unique key) character set utf8;
那么之间的区别有哪些呢?
①一个表中的主键只能有一个,可以有多个唯一索引。
②主键不允许为空值,唯一索引可以为空值。
2、全文索引
全文索引是什么呢?
首先全文索引在mysql中的书写为:fulltext key;
全文索引的作用是什么呢?
一般的数据库搜索都是用的SQL的 like 语句,like 语句是不能利用索引的,每次查询都是从第一条遍历至最后一条,查询效率极其低下。一般数据超过10万或者在线人数过多,like查询都会导致数据库崩溃。这也就是为什么很多程序都只提供标题搜索的原因了,因为如果搜索内容,那就更慢了,几万数据就跑不动了。
Mysql 全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索效率高,能够支持百万级的数据检索。
从 Mysql 4.0 开始就支持全文索引功能,但是 Mysql 默认的最小索引长度是 4。如果是英文默认值是比较合理的,但是中文绝大部分词都是2个字符,这就导致小于4个字的词都不能被索引,全文索引功能就形同虚设了。国内的空间商大部分可能并没有注意到这个问题,没有修改 Mysql 的默认设置。
如果您使用的是自己的服务器,请马上进行设置,不要浪费了这个功能。
如果您使用的是虚拟主机,请马上联系空间商修改配置。首先,Mysql 的这个默认值对于中文来说就是一个错误的设置,修改设置等于纠正了错误。其次,这个配置修改很简单,也就是几分钟的事情,而且搜索效率提高也降低了空间商数据库宕掉的几率。如果你把本文发给空间商,我相信绝大部分都会愿意改的。
设置方法:
请联系服务器管理员修改my.ini ,在 [mysqld] 后面加入一行“ft_min_word_len=1”,然后重启Mysql,再登录网站后台(模块管理->全站搜索)重建全文索引,否则将无法使用全站搜索功能。
详细参考地址:https://yq.aliyun.com/ziliao/59989
3、过滤器
过滤器一般发生的情况时在网页请求时,需要对某些特定的东西进行过滤。比如:权限管理、编码设置、session检查等等。
那么我们应该怎么针对网页的请求进行过滤呢?
①创建一个class实现filter接口,重写init()、doFilter()、destroy()方法,一般对于请求的过滤重点是doFilter方法。
②方法写好了,那么应该需要在开始请求的时候让服务器找到这个类,所以需要配置web.xml文件。
实际操作是怎样的呢?
①创建类MyFilter实现Filter接口
1 package com.bjsxt.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 12 public class MyFilter implements Filter{ 13 14 public void destroy() { 15 // TODO Auto-generated method stub 16 System.out.println("我被销毁了"); 17 } 18 19 public void doFilter(ServletRequest arg0, ServletResponse arg1, 20 FilterChain arg2) throws IOException, ServletException { 21 // TODO Auto-generated method stub 22 System.out.println("我被过滤了"); 23 arg2.doFilter(arg0, arg1); 24 System.out.println("我被过滤了12"); 25 } 26 27 public void init(FilterConfig arg0) throws ServletException { 28 // TODO Auto-generated method stub 29 System.out.println("我被初始化了"); 30 } 31 32 }
②配置web.xml,一般在WEB-INF文件下
1 <filter> 2 <filter-name>myFilter</filter-name> 3 <filter-class>com.bjsxt.filter.MyFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>myFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping> 9 <servlet>
这样在请求的时候全对所有的请求进行过滤。
其中:
<url-pattern>参数有几个情况:
/* :对所有请求过滤。
*.do :对带.do的请求进行过滤。
/st :对莫一模块下的请求进行过滤。
好了 !今天上午的总结!!!不建议每天多进行几次的总结笔记~~~
以上是关于每日一记--索引/过滤器的主要内容,如果未能解决你的问题,请参考以下文章