Mysql性能优化——实战篇
一、组合索引
1、什么是单列索引、组合索引?
单列索引:就是对某一个列建立索引,比如只对username这列建立索引(对where后面的列创建索引)
add
index(username(10))。
查询语句:
select column
from tbl_user where username=?;
组合索引:顾名思义多一个列建立索引,比如对username, email,
address建立索引
add
index(username(10), email(12), address(10))。
查询语句:
select
column from tbl_user where username=? and email=? and address=?
2、如何设置索引
对于varchar等类型他的长度是不固定的,为了提高检索效率,我们一般会对字段取前面的固定几位进行索引,比如上面的username取10位。
3、什么是左侧原则
add
index(username(10), email(12), address(10))。
查询语句:
select
column from tbl_user where email=? and
address=?
考虑上面这个语句有什么问题?效率为什么低?
原因:建立上面这样的组合索引,其实数据库中相当于分别建立了以下三条:
add
index(username(10)
add
index(useranem(10), email(12))
add
index(username(10), email(12), address(10))
上面就是所谓的“左侧原则”,从最左边的开始进行组合。
所以:下面几个效率会低,因为他找不到索引
select
column from tbl_user where email=? and
address=?
select
column from tbl_user where email=?
select
column from tbl_user where address=?
下面几个效率会高,因为他找到索引
select
column from tbl_user where username=?
and email=? and address=?
select
column from tbl_user where username=?
and email=?
select
column from tbl_user where username=?
4、遇到or,如何写sql语句?
add
index(username(10), email(12), address(10))。
查询语句:
select
column from tbl_user where username=? or email=?
上面的查询语句很鸡肋,没办法靠索引方式来,怎么办了?优化sql语句(自我组合)。
则需要建立email索引,并用以下sql语句union
add
index(email(12))
查询语句:
select
column from tbl_user where username=? union
select column from tbl_user where email=?
二、Text全文检索
对于text必须使用MyISAM存储引擎
CREATE TABLE articles (
id
INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body
TEXT,
FULLTEXT (body)
) ENGINE=MyISAM
DEFAULT CHARSET=utf8;
查询的时候:
SELECT * FROM articles
WHERE MATCH (body) AGAINST ('database');
三、水平数据剥离
比如:tbl_article
article_id
|
title
|
content
|
add_time
|
author
|
hit
|
int
|
varchar
|
text
|
timestamp
|
varchar
|
int
|
将大数据字段进行水平剥离content字段:
现优化如下:
比如:tbl_ article(使用innodb,hit字段经常更新)
article
_id
|
Cotent
|
content_id
|
add_time
|
author
|
hit
|
int
|
varchar
|
int
|
timestamp
|
varchar
|
int
|
tbl_content:(使用MyISAM,支持全文检索)
content
_id
|
cotent
|
int
|
varchar
|
这样就可以把tbl_article数据列转换成固定的数据行格式,减少表的碎片,在查询的时候运行select
* 不会通过网络传输大量的content内容了。性能上大大的提高了。
四、IP地址
使用unsigned int来表示ip地址,比如:10.204.79.125,他存储的时候是:
“10*2^24+204*2^16+79*2^8+125”计算的值
注意:java中需要使用long来进行操作。
user_id
|
ip
|
int
|
unsigned
int
|
五、时间问题
建议使用unsigned int来保存,如果使用DateTime类型来保存,见下面例子
select * from tbl_user where date(add_time)
between ‘2012-12-1’ and ‘2012-12-10’
需要转化获取日期,date函数结果对索引无效。所以上面的方式在检索的时候效率很慢(无法使用索引)
请使用如下方式保存字段:
user_id
|
add_time
|
int
|
unsigned
int
|
查询的时候(时间是秒数)
select * from tbl_user where add_time>123123125553
and addtime<1231231235
分享到:
相关推荐
以下是一份详细的MySQL优化笔记,涵盖了多个方面: 一、查询优化 1. 使用索引:为经常用于搜索的列创建索引可以显著加快查询速度。B树和哈希索引是最常见的类型,适用于不同的查询场景。 2. 避免全表扫描:尽量使用...
mysql慢可能是配置不对,阅读一下这个可能对你有帮助 ...对于Discuz!... 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。
以下将详细介绍MySQL优化的各个方面,并结合提供的文件名进行推测,尽管没有实际内容,但我们可以根据文件名来讨论可能涉及的主题。 1. **索引优化**:`mysql_rel.sql`可能包含SQL脚本,其中创建表结构和数据的关系...
在进行MySQL优化时,我们需要对数据库进行深入分析,以便找到性能瓶颈并进行相应的调整。优化可以分为三个主要部分:优化概述、查询与索引优化分析以及配置优化。 首先,在优化概述部分,了解MySQL数据库常见瓶颈是...
在"MySQL优化.rar"这个压缩包中,我们很显然会接触到关于MySQL数据库优化的详细内容,这包括但不限于查询优化、索引优化、存储引擎选择、架构设计等多个方面。 首先,查询优化是MySQL性能提升的关键步骤。通过对SQL...
为什么要开发这个MySQL 优化工具(Why) “一键优化”功能,可以优化本地/远程需要优化的机器,将繁琐的优化工作“傻瓜”式操作 根据您的业务需求Step By Step优化的MySQL服务器参数,起到指引的作用,简化用户...
以下是一些深入浅出的MySQL优化策略: 1. 选择合适的字段属性: 在设计数据库表时,应尽可能减小字段宽度,以减少存储空间和查询时间。例如,邮政编码字段只需设定为CHAR(6)即可,无需使用VARCHAR或更大的类型。...
MySQL优化是数据库管理中至关重要的环节,它涉及到提升查询性能、降低资源消耗,从而提高整个系统的响应速度和服务质量。MySQL自带的慢查询日志(slow query log)是进行优化的重要工具之一,它记录了执行时间超过预设...
MySQL 优化方法主要涵盖...总之,MySQL优化涉及多个层面,包括合理选择存储引擎、优化字段类型、建立合适索引以及编写高效的SQL语句。每个环节都对数据库性能有着直接影响,需要根据实际业务需求进行综合考虑和调整。
### MySQL优化知识点详解 #### 一、MySQL简介 MySQL是一款由MySQL AB公司开发的开源数据库管理系统,后来该公司被Sun Microsystems收购。MySQL因其简单、高效、可靠的特点,在IT行业中迅速崭露头角,成为最受欢迎...
21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用SHOW PROCESSLIST 26. 如何知晓MYSQL解决一条查询 27. MYSQL非常不错 28. MYSQL应避免...
我的mysql优化日记 我的mysql优化日记 我的mysql优化日记 我的mysql优化日记
MySQL优化是数据库管理中至关重要的一个环节,它旨在提高数据查询效率、降低系统资源消耗,以确保服务的稳定性和响应速度。"MySQL优化大揭秘"这个压缩包中的"SQL.pdf"很可能包含了关于如何优化MySQL数据库的详细教程...
mysql优化从以下几个方面介绍 mysql的架构 索引优化分析 查询截取分析 mysql锁机制 主从复制
MySQL优化是数据库管理中的关键环节,它涉及到性能提升、资源利用率优化以及系统稳定性的保障。这份"Mysql优化 PPT"可能会涵盖多个方面的内容,包括但不限于查询优化、索引策略、存储引擎选择、数据库架构设计、资源...
教程名称:大型门户网站核心技术-Mysql优化 课程目录:【】Mysql优化 资料【】Mysql优化01关键技术【】Mysql优化02表的设计【】Mysql优化03慢查询(一)【】Mysql优化04慢查询(二)【】Mysql优化05慢查询(三)【】Mysql...
总结来说,企业级MySQL优化是一个综合性的任务,涵盖安装配置、引擎选择、算法理解、集群构建和日常维护等多个环节。通过深入理解MySQL的工作机制和优化技巧,可以有效地提升数据库性能,保障企业的业务运行。