mysql复合索引

如何增删改查前6个数据

输入以下sql语句:

select title,url from news_info where category='头条' limit 0,6

结果如下:
在这里插入图片描述

如何增删改查后6个数据

输入:

select title,url from news_info where category='头条' ORDER BY date DESC LIMIT 5

解析一下
其中title,url为要查询的表字段名,news_info为要查询的表名
where category=’'则是查询条件
ORDER BY 取决于
ORDER BY date(因为这里我是以标题的时间顺序来决定最后(按照时间排序最后五位就应该是时间最靠前的,因为插入数据时时间最早的排在最前面))
如下(从后往前排)第一行为查询到的数据的最后一个数据:
在这里插入图片描述
当然一般是根据id来作为取决项。

如何多个查询语句合并查询增加性能(使用UNION合并)

首先我们看一下单个查询时间:

select title,url from news_info where category='头条'

如下:
在这里插入图片描述
查询时间是:0.486s。
查询第二个:

select title,url from news_info where category='社会' 

结果:
在这里插入图片描述
两个单个查询时间相加得:2.273s。
我们合并查询:

select title,url from news_info where category='头条' UNION select title,url from news_info where category='社会'

查询结果:
在这里插入图片描述
只用了0.666s,提升了查询性能。

使用慢查询

可以使用可视化工具输入如下代码:

show VARIABLES like '%slow%'

如下:
在这里插入图片描述
其中show_query_log ON表示慢查询开启,log_file表示慢查询日志文件地址
输入(即可查询最慢多少秒算是慢查询,默认值是10.000000即10s):

show VARIABLES like 'long_query_time'

如下:
在这里插入图片描述
这里我通过设置输入:

set long_query_time=3.0
show VARIABLES like 'long_query_time'

修改本地慢查询时间设置:
在这里插入图片描述
输入如下:

show GLOBAL VARIABLES like 'long_query_time'

在这里插入图片描述
查询远端数据慢查询,通过set global来设置全球慢查询。

set global long_query_time=4.0;

在这里插入图片描述

创建索引

什么是索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引用的好的话可以提高数据库使用性能。
我们有这样一张表:
在这里插入图片描述
可以作为查询(方便查询)索引的uniquekey、date、category等。
此时我们新建一个查询输入如下:

select title,url,date from news_info where category='头条'

在这里插入图片描述
此时我们设置一个索引来优化这个查询,:

alter table news_info add index in_ca(category);

创建索引有两种办法,一种就是上面写的:
alter table +tablename+add+index+ 索引名字+(字段名);
在这里插入图片描述
第二种
create index indexname on tablename(字段名);
在这里插入图片描述
我们如何查看索引是否使用呢,输入如下:

explain select title,url,date from news_info where category='头条'

在这里插入图片描述
只用了0.495s比之前没用索引快了0.2s左右。
检查使用使用索引只需要在正常sql语句前加上explain即可。
其中table 即查询的表,type如果是all则表明遍历了整个表,possible_key就可能的关键索引值,in_ca就是我们的索引名,rows表示查询到的数据的记录条数139。

复合索引

如下表:
在这里插入图片描述
其中字段user_phone,news_id为外键,所以使用频率较高,考虑使用复合索引,输入如下:

alter table user_collect add index in_fh(user_phone,news_id);

今天关于mysql的进阶学习先到这里,后面将会继续学习mysql数据库性能优化,欢迎讨论!
补充:全文检索

全文检索

新建全文检索方式(支持中文全文检索):
本文使用mysql数据库版本为5.7+,InnoDB数据库引擎
全文检索解析器ngram(解决不支持中文检索方式,版本要求5.7.6+,为mysql内置插件,不需要安装,默认支持检索最短字符为2,即不支持单个字如’国’检索)

alter table news_info add fulltext index ft_in(title,category) with parser ngram;

其中fulltext表示全文,index索引,ft_in检索名称,(title,category)表示要设置全文检索的字段名,parser ngram即使用ngram全文解析。
执行完成后,就可以通过一下语句检索:

select *from news_info where match(title,category) against('中国' in boolean mode);

查询结果如下:
在这里插入图片描述
首先解释一下sql语句,使用全文检索的格式:

select xxx from  table_name where 
match(自己设置的检索字段名) against('xx' in boolean mode);

关于设置ngram的最短检索字符值,请自行百度。
使用全文检索在数据量较大的情况下,比(like’’)模糊查询要更快一筹。
下一篇会学习其他的mysql进阶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值