如何增删改查前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进阶。