• 大小: 2KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-10
  • 语言: 数据库
  • 标签: MySql  Like  

资源简介

MySql查询数据慢可以用用这个工具,瞬间提升Like查询效率

资源截图

代码片段和文件信息

package test;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;

public class LikeSearch {

   @SuppressWarnings(“unchecked“)
   private final  CharColumn columns[] = new CharColumn[Character.MAX_VALUE]; 
   
   public void put(T tString value){
   char[] chars = value.toCharArray();
   for(int i=0;i    char c = chars[i];
   CharColumn column = columns[c];
   if(null == column){
   column = new CharColumn();
   columns[c] = column;
   }
   column.add(t(byte)i);
   }
   
   }
   
   /**
    * 修改数据
    * @param id 主键id
    * @param newValue 新字符串
    */
   public void update(T idString newValue){
   remove(id);
   put(idnewValue);
   }
   
   /**
    * 
    * @param word
    * @param limit
    * @return
    */
   public Collection search(String wordint limit){
   char chars[] = word.toCharArray();
   int n = word.length();
   Context context = new Context();
   for(int i =0;i    CharColumn column = columns[chars[i]];
   if(column == null){
   break;
   }
   if(!context.filter(column)){
   break;
   }
   n--;
   }
   if(n ==0){
   return context.limit(limit);
   }
   return Collections.emptySet();
   }
   
   /**
    * 删除数据
    * 删除成功 返回true不包含返回false
    * @param id
    * @return
    */
   public boolean remove(T id){
   boolean sign = false;
   for(CharColumn column : columns){
   if(column != null){
   if(column.remove(id)){
   sign = true;
   }
   }
   }
   
   return sign;
   }
   
   private class Context{
   Map result;
   boolean used =false;
   private boolean filter(CharColumn columns){
   if(this.used == false){
   this.result = new TreeMap(columns.poxIndex);
   this.used = true;
   return true;
   }
   boolean flag = false;
   Map newResult = new TreeMap();
   Set> entrySet = columns.poxIndex.entrySet();
   for(Map.Entry entry:entrySet){
   T id = entry.getKey();
   byte[] charPox = entry.getValue();
   if(!result.containsKey(id)){
   continue;
   }
   byte[] before = result.get(id);
   boolean in = false;
   for(byte pox :before){
   if(contain(charPox(byte)(pox+1))){
   in = true;
   break;
   }
   }
   if(in){
   flag = true;
   newResult.put(id charPox);
   }
   
   }
   result =newResult;
   return flag;
   }
   public Collection limit(int limit){
   if(result.size() <= limit){
   return result.keySet();
   }
   Collection ids = new TreeSet();
   for(T id : result.keySet()){
   ids.add(id);
   if(ids.size() >

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4237  2017-11-17 21:58  LikeSearch\LikeSearch.java
     文件         439  2017-11-17 22:00  LikeSearch\TestLikeSearch.java
     目录           0  2017-11-17 22:12  LikeSearch\

评论

共有 条评论