每日一记--索引/过滤器

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;
View Code

技术分享图片

那么之间的区别有哪些呢?

①一个表中的主键只能有一个,可以有多个唯一索引。

②主键不允许为空值,唯一索引可以为空值。

 

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 }
View Code

   ②配置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>        
View Code

 

这样在请求的时候全对所有的请求进行过滤。

其中:

    <url-pattern>参数有几个情况:

      /* :对所有请求过滤。

        *.do :对带.do的请求进行过滤。

       /st :对莫一模块下的请求进行过滤。

 

好了 !今天上午的总结!!!不建议每天多进行几次的总结笔记~~~

 



以上是关于每日一记--索引/过滤器的主要内容,如果未能解决你的问题,请参考以下文章

[每日一记] Python报错 IndentationError: unexpected indent

iOS每日一记------------之 中级完美大整理

每日一记8.1

每日一记--技术小细节

2018-12-12每日一记

每日一记8.7