栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用户量多后登录时查询速度慢怎么办?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用户量多后登录时查询速度慢怎么办?

文章目录
  • 用户量多后登录时查询速度慢怎么办?
    • 给用户名字段创建唯一索引 提升速度登录查询速度
        • 知识点:使用MySQL给表里的某个字段建立索引
      • 对数据库操作:
        • 创建唯一索引前:
        • 创建唯一索引后:
        • 索引type级别说明:
        • 索引至少需要优化到的级别
  • 我的学习论坛

用户量多后登录时查询速度慢怎么办?

给用户名字段创建唯一索引 提升速度登录查询速度 知识点:使用MySQL给表里的某个字段建立索引
1.添加PRIMARY KEY(主键索引):

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

2.添加UNIQUE(唯一索引) :

ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

 

3.添加INDEX(普通索引) :

写法一:

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

写法二:

CREATE INDEX index_name ON `table_name`(`column1`,`column2`,`column3`) 

4.添加FULLTEXT(全文索引) :

ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

 

5.添加多列索引:

写法一:

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

写法二:

CREATE INDEX index_name ON `table_name`(`column1`,`column2`,`column3`)

SHOW INDEX FROM `table_name`;-- 查询表索引

DROp INDEX index_name ON `table_name`;-- 删除索引
对数据库操作: 创建唯一索引前:

查询用户表索引:SHOW INDEX FROM hd_user

测试查询用户表,看查询是否走索引:EXPLAIN SELECt * FROM hd_user WHERe username = ‘handsome’

未走索引,type为all,全表扫描,当数据量多时速度极慢。

创建唯一索引后:

给用户名字段创建唯一索引:ALTER TABLE hd_user ADD UNIQUE(username)

再次查询用户表索引:SHOW INDEX FROM hd_user

用户名字段唯一索引创建成功

测试查询用户表,看查询是否走索引:EXPLAIN SELECt * FROM hd_user WHERe username = ‘handsome’

给用户名字段创建唯一索引后,type类型为const,数据量大时查询速度明显提升。

索引type级别说明:
system>const>eq_ref>ref>range>index>ALL

这是type级别,越左边,查询速度越快。

怎么样才能让type靠左呢,就是建立索引。

Type级别解释
1、system级别
A、只有一条数据的系统表
B、或衍生表只能有一条数据的主查询

很明显 实际开发当中 我们是不会只有一条数据的

2、const级别
仅仅能查出一条的SQL语句并且用于Primary key 或 unique索引;
SELECt * from shop s where s.id=?
主键索引、唯一索引和unique索引达到这个级别,我们写sql要根据公司的业务去写,这个情况也很难达到的。

3、eq_ref级别
唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能0);
比如你select …from 一张表 where 比方说有一个字段 name = 一个东西,也就是我们以name作为索引,假设我之前给name加了一个索引值,我现在根据name去查,查完后有20条数据,我就必须保证这二十条数据每行都是唯一的,不能重复不能为空!

只要满足以上条件,你就能达到eq_ref,当然前提是你要给name建索引,如果name连索引都没,那你肯定达不到eq_ref;

此种情况常见于唯一索引和主键索引;

比如我根据name去查,但是一个公司里面或一个学校里面叫name的可能不止一个,一般你想用这个的时候,就要确保你这个字段是唯一的,id就可以,你可以重复两个张三,但是你身份证肯定不会重复;

添加唯一键语法:alter table 表名 add constraint 索引名 unique index(列名)

检查字段是否唯一键:show index form 表名;被展示出来的皆是有唯一约束的;

4、ref级别
ref级别的问题不大。

非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)。

假设有俩张三,我建立了非唯一索引,那么查出来就是这个级别拉,是不是很简单。

5、range级别
检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);
in有时有可能会失效,导致为ALL;

6、index级别
把索引的数据全查出来 就是这个级别了

7、ALL级别
不做索引 就是all级别

索引至少需要优化到的级别

这里说到重要的点:
ALL

index

range

ref 辅助索引等值查询

eq_ref 多表连接查询,连接条件是主键或者唯一键

system,const 主键或者唯一键,等值查询

优化的至少级别是range

我的学习论坛

HandsomeForum:用Java编写的学习论坛,打造我们自己的圈子!(http://huangjunjie.vip:66)
文章链接:http://huangjunjie.vip:66/blog/read/k0cn1wat8f9ql6jhlg

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号