mysql优化概述3
1、前缀索引
建立索引关键字一种方案。
通常会使用字段的整体作为索引关键字。
有时,使用字段前部分数据,也可以去识别某些记录。
语法:
index `索引名` (`字段`(N)); 使用字段前N个字符建立索引。
N,究竟是多少?
使用N长度所达到的辩识度,极限接近于使用全部长度的辩识度概可。
> select count(*) from student; --总记录数,比如1000000
> select 1000000/count(distinct ename) from student; --ename能够达到的最大辩识度
> select 1000000/count(distinct substring(ename, 1, 5)) from student; --测试前5个字符达到的辩识度
依次取前N个字符,进行对比,找到极限接近辩识度的长度。 > alter table student add index `i_ename` (`ename`(9));
(*前缀索引不能使用索引覆盖。) 2、全文索引
特殊:关键字的创建上。
为了解决like '%keyword%'这类查询的匹配问题。 表结构如下:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT
); INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
如果我们要查询title和body中包含 database的记录,sql语句如下: > select * from articles where title like '%database%' or body like '%database%';
这种情况无法通过创建普通索引来提高查询效率。
只能建立全文索引: > alter table articles add fulltext index `fi_tb` (`title`,`body`);
使用全文索引需要使用特殊的匹配语法: > select * from articles where match(title,body) against('database');
match() against() 返回的关键字的匹配度,(关键字与记录的关联程序) > select * from articles where match(title,body) against('in');
上述语句没有返回结果。
原因?全文索引索引的关键字,不是整个字段数据,而是从数据中提取的关键词。
而停止词是不被索引的。 (*mysql的全文索引不支持中文) 3、索引的数据结构
hash
b-tree
两种数据结构,指的是mysql存储索引所采用的数据结构。其中用户所维护的所有索引结构b-tree结构。 4、聚簇索引
在innodb存储引擎上,主索引是与数据记录存储在一起的(聚簇在一起)。 带来的问题?
innodb的其他索引,非主键索引(二级索引),
关键字对应的不再是记录的地址,而是记录的主键。
所以,查询需要二次检索,先检索到ID,在检索记录。 5、查询缓存query_cache
将select的结果,存储起来供二次使用。
开启查询缓存: > show variables like 'query_cache%';

> set global query_cache_type = 1; > set global query_cache_size = 1024*1024*32;
注意事项:
(1)、查询缓存的存在判断是严重依赖于select语句本身,严格保证sql一致(包括大小写)。
(2)、如果查询时包括动态数据则不能缓存。
(3)、一旦开启了查询缓存,mysql会将所有可以被缓存的select语句都缓存,如果不想被缓存,
可以使用SQL_NO_CACHE来指定不缓存。 > select SQL_NO_CACHE * from student where id = 5;
mysql优化概述3的更多相关文章
- MySQL优化概述
一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...
- mysql优化概述4
一.分区 1.分区概念 将某张表数据,分别存储到不同的区域中. 每个分区,都是独立的表,都要存储该分区的数据,索引信息. 2.创建分区 创建表并指定分区的选项 create table 表名 ( 定义 ...
- mysql优化概述2
一.索引的概念 利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引.索引的关键字一定是排序的. 二.索引的类型 mysql支持四种索引: 1.主 ...
- Mysql优化-概述
摘抄并用于自查笔记 为什么要优化 一个应用吞吐量瓶颈往往出现在数据库的处理速度上. 随着应用程序的使用,数据库数据逐渐增多,数据库处理压力逐渐增大. 关系型数据库的数据是存放在磁盘上,读写速度慢(与内 ...
- Mysql优化概述及其压力测试工具
衡量指标 TPS:Transactions Per Second (每秒传输的事物处理个数) ,这是指服务器每秒处理的事物数,支持事物的存储引擎如Innodb等特有的一个性能指标; QPS:Queri ...
- mysql优化一 之 优化内容概述及开启慢查日志的相关配置
1-1数据库优化的目的 首先是为了避免出现页面访问错误(基本有三种) (1)由于数据库连接timeout产生的页面5XX错误 (2)由于慢查询造成页面无法加载 (3)由于阻塞造成的数据无法提交 其次: ...
- 深入MySQL(四):MySQL的SQL查询语句性能优化概述
关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...
- 0104探究MySQL优化器对索引和JOIN顺序的选择
转自http://www.jb51.net/article/67007.htm,感谢博主 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序.表结构和数据准备参考本文最后部分" ...
- MySQL优化技巧
目录 MySQL的特点 数据类型优化 整型类型 小数类型 字符串类型 时间类型 主键类型的选择 特殊类型的数据 索引优化 一个使用Hash值创建索引的技巧 前缀索引 多列索引 聚簇索引 覆盖索引 重复 ...
随机推荐
- 含有不等式约束的优化问题——KKT条件
优化问题: 其中, 定义:对于一个不等式约束,如果,那么称不等式约束是处起作用的约束. 定义:设满足,设为起作用不等式约束的下标集: 如果向量:是线性无关的,则称是一个正则点. 下面给出某个点是局部极 ...
- .NET MVC ToList() 转Json
#region 方法一 #region ToList()转json /// <summary> /// 通过类别 Id 获相应产品 /// </summary> /// < ...
- linux系统下修改文件夹目录权限-chmod
Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名 ...
- 0_Simple__simplePitchLinearTexture
对比设备线性二维数组和 CUDA 二维数组在纹理引用中的效率 ▶ 源代码.分别绑定相同大小的设备线性二维数组和 CUDA 二维数组为纹理引用,做简单的平移操作,重复若干次计算带宽和访问速度. #inc ...
- Json中相同或者重复记录的值相加组成新的Json
var data = [ {"Networking": "WiFi", "count_value": "2000"}, ...
- 前端-CSS-5-继承性&层叠性&权重比较
1.继承性 <style type="text/css"> .father{ font-size: 30px; background-color: green; } . ...
- <!-- str.startsWith('胡') 检查一个 字符串中是否有某字符 返回true false -->& vh 属性
1.<!-- str.startsWith('胡') 检查一个 字符串中是否有某字符 返回true false --> 2. vh 分享到选择其它项 复制本页链接 版本:CSS3 补 ...
- Swift - JPush极光推送的使用3(根据Alias别名,给某个指定用户发推送)(转)
一.别名(alias)介绍 (1)我们可以给每一个安装了应用程序的用户,取不同别名来标识(比如可以使用用户账号的 userid 来作为别名). (2)以后给某个特定用户推送消息时,就可以用此别名来指定 ...
- U3D游戏运行时资源是如何从AB中加载出来的
以安卓为例 1,游戏启动,自定义版本管理器去安卓的持久化目录下查找我们自定久的版本管理文件 rep.db,若该文件不存在,说明这是游戏第一次启动,于是就把streammingAssets下的LUA文件 ...
- locate包的安装
linux中locate命令可以快速定位我们需要查找的文件,但是在yum中,locate的安装包名为 mlocate(yum list | grep locate可以查看),安装方法: yum -y ...