登陆

章鱼彩票彩金和鱼丸-mysql真的不能做搜索引擎吗?

admin 2020-02-14 275人围观 ,发现0个评论

咱们都对电商的产品查询并不生疏,比方咱们想依据产品名称查询一切产品信息。

有些技能的童鞋榜首想法是搜索引擎;有些技能的童鞋榜首想法是含糊查询,如like?(假如产品信息存放到mysql里,咱们一般运用like查询)

咱们都知道,不同的场景决议了不同技能的运用场景也不同,那咱们该怎么挑选呢?

那咱们先做个试验吧(试验对象是mysql 8.0 community 版,windows10)

1.装置mysql 8.0 community 版别 https://dev.mysql.com/downloads/windows/installer/8.0.html

我运用的web版别 step by step

2.装置客户端SQLyog MySQ https://www.cr173.com/soft/22147.html

3 衔接mysql 报错:

SQLyog衔接报错 Error No.2058 Plugin caching_sha2_password could not be loaded

解决方法:windows 下cmd 登录 mysql -u root -p 登录你的 mysql 数据库,然后 履行这条SQL:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

#password 是你自己设置的root暗码

4.刺进数据

依靠包:

 
mysql
mysql-connector-java
8.0.13

程序

 public void mysqlOneByOneInsert() {
// JDBC 驱动名及数据库 URL
String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
String DB_URL = "jdbc:mysql://localhost:3306/www?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";//链接的mysql

// 数据库的用户名章鱼彩票彩金和鱼丸-mysql真的不能做搜索引擎吗?与暗码,需求依据自己的设置
String USER = "root";
String PASS = "wangwei456";
try {
long start=System.currentTimeMillis();
Class.forName(JDBC_DRIVER);
Connection connection = DriverManager.章鱼彩票彩金和鱼丸-mysql真的不能做搜索引擎吗?getConnection(DB_URL, USER, PASS);
PreparedStatement stmt = connection.prepareStatement("INSERT INTO PERSON(ID,NAME,AGE,ADDRESS,SALARY) values(?,?,?,?,?);");

for(int i=0;i<1000000;i++) {
stmt.setInt(1, i+1);
stmt.setString(2, "mkyong"+i);
stmt.setInt(3, i%100);
stmt.setString(4, "address"+i);
stmt.setFloat(5, 25000.00f);
stmt.executeUpdate();
}
stmt.close();
connection.close();
System.out章鱼彩票彩金和鱼丸-mysql真的不能做搜索引擎吗?.println("耗时:"+(System.c三支一扶urrentTimeMillis()-start)+" 毫秒");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

}

中心报错:

java.sql.SQLException: The server time zone value '???????' is unrecognized or represents more

解决方法:

在jdbc衔接的url后边加上serverTimezone=GMT即可解决问题,假如需求运用gmt+8时区,需求写成GMT%2B8

感触:mysql输入刺进速度(单条)简直是龟速呀 耗时:4390167 毫秒=4390秒=73分钟

1.准确查询 无索引

SELECT * FROM PERSON WHERE NAME='mkyong99999'

耗时:0.747秒

2.含糊查询 无索引

SELECT * FROM PERSON WHERE NAME LIKE 'mkyong99999%'

查询耗时:0.732秒

3.准确查询 有索引

SELECT * FROM PERSON WHERE NAME='mkyong99999'

耗时:0.01秒

4.含糊查询 有索引

FLUSH TABLES;
SELECT * FROM PERSON WHERE NAME LIKE 'mkyong99999%'

耗时:0.02秒

是不是很惊诧?看看履行计划

走的是索引。和很多人的知识是相反的。

5.无索引

SELECT * FROM PERSON WHERE ADDRESS='杭州大街100号99999'

耗时 0.911秒

6.无索引

FLUSH TABLES;
SELECT * FROM PERSON WHERE ADDRESS LIKE '杭州大街100号99999'

耗时0.775秒

7.有索引

FLUSH TABLES;
SELECT * FROM PERSON WHERE ADDRESS='杭州大街100号99999'
SELECT * FROM PERSON WHERE ADDRESS LIKE '杭州大街100号99999'

都是0.01秒

8.针对有些字段比较长,运用含糊查询会慢的问题,mysql 从5.6后供给了全文检索功用,以5.8为例

ngram Full-Text Parser供给了分词的功用

创立全文索引

CREATE FULLTEXT INDEX add_index ON PERSON (ADDRESS) WITH PARSER ngram;

查询

SELECT * FROM PERSON WHERE MATCH (ADDRESS) AGAINST('杭州大街100号99999');

耗时:23秒

小结:

1.like查询不一定不走索引,以试验验证为准

2.产品量或许数据量比较小的情况下(一般100w以下),like查询并不慢。

3.搜索引擎在千万,亿等级或许以上起到的效果才会比较显着,下篇会持续剖析。

4.mysql供给的全文索引的运用仍是在把握的情况下再运用,不然反而会影响体系功能

参考文献:

【1】https://blog.csdn.net/jared456/article/details/80380853

【2】https://blog.csdn.net/weixin_37577564/article/details/80329775

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP