广告
返回顶部
首页 > 资讯 > 数据库 >mysql语句的优化
  • 587
分享到

mysql语句的优化

2024-04-02 19:04:59 587人浏览 薄情痞子
摘要

本篇内容介绍了“Mysql语句的优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! mysql客

本篇内容介绍了“Mysql语句的优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


 
mysql客户端连接成功后,通过使用show [session|global] status 命令可以提供服务器状态信息。
其中的session来表示当前的连接的统计结果,global来表示自数据库上次启动至今的统计结果,默认是session级别的。 

下面的例子:
show status like ‘Com_%’; 其中Com_XXX表示XXX语句所执行的次数.重点注意:Com_select,Com_insert,Com_update,Com_delete通过这几个参数,
可以容易地了解到当前数据库的应用是以插入更新为主还是以查询操作为主,以及各类的sql大致的执行比例是多少。
 
还有几个常用的参数便于用户了解数据库的基本情况。
Connections:试图连接MySQL服务器的次数 show status like 'Connections'
Uptime:服务器工作的时间(单位秒)show status like 'Uptime'
Slow_queries:慢查询的次数 (默认是10) show status like ‘Slow_queries’
如何查询mysql的慢查询时间
Show variables like 'long_query_time';
修改mysql 慢查询时间
set long_query_time=2
 
***如何定位慢查询
Show variables like 'long_query_time';
可以重新设置 set long_query_time=2 
****测试语句***
select * from emp e,dept d where e.empno=123451  and e.deptno=d.deptno; 
如果带上order by e.empno 速度就会更慢,有时会到1min多.
****在默认情况下mysql不记录慢查询日志,需要在启动的时候指定bin\mysqld.exe - -slow-query-log
该慢查询日志会放在data目录下[在mysql5.0这个版本中时放在 mysql安装目录/data/下],在 mysql5.5.19下是需要查看
my.ini 的 datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/“
来确定.
 
Explain select * from emp where ename=“zrlcHd”会产生如下信息:
select_type:表示查询的类型。
table:输出结果集的表
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
key:表示实际使用的索引
key_len:索引字段的长度
rows:扫描的行数  www.2cto.com  
Extra:执行情况的描述和说明
 
说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行个正确的’create index’,
查询速度就可能提高百倍千倍,这可真有诱惑力。可是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,
这些写操作,增加了大量的I/O。 
是不是建立一个索引就能解决所有的问题?ename
上没有建立索引会怎样?
select * from emp where ename=‘axJxC’;
 
索引的代价
磁盘占用
对dml(update delete insert)语句的效率影响
**四种索引的类型可以通过myadmin创建一个索引的时候看到
**简述mysql四种索引的区别
PRIMARY 索引 =》在主键上自动创建
UNIQUE 索引=> 相当于INDEX + Unique
INDEX 索引=>就是普通索引
FULLTEXT => 只在MYISAM 存储引擎支持, 目的是全文索引,在内容系统中用的多, 在全英文网站用多(英文词独立). 中文数据不常用,意义不大 国内全文索引通常 使用 sphinx 来完成.
 
**复合索引
create index 索引名 on 表名(列1,列2);
建立索引:create [UNIQUE|FULLTEXT]  index index_name on tbl_name (col_name [(length)] [ASC | DESC] , …..); alter table table_name ADD INDEX [index_name] (index_col_name,...)
添加主键(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 联合主键
删除索引 DROP INDEX index_name ON tbl_name; alter table table_name drop index index_name;  www.2cto.com  
删除主键(索引)比较特别: alter table t_b drop primary key;
查询索引(均可) show index from table_name; show keys from table_name; desc table_Name;
下列的表将不使用索引:
1,如果条件中有or,即使其中有条件带索引也不会使用。
2,对于多列索引,不是使用的第一部分,则不会使用索引。
3,like查询是以%开头
4,如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。
5,如果mysql估计使用全表扫描要比使用索引快,则不使用索引。
 
添加一个主键索引
alter table dept add primary key (deptno)
--测试语句
explain select * from dept where deptno=105\G;
结果是:
mysql> explain select * from dept where deptno=105\G;
*************************** 1. row ***************************
           id: 1  www.2cto.com  
  select_type: SIMPLE
        table: dept
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 3
          ref: const
         rows: 1
        Extra:
1 row in set (0.00 sec)
 
--创建多列索引
alter table dept add index myind (dname,loc);
--证明对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用
explain select * from dept where dname=‘rjTUPqjZvf’\G; 会显示使用到了索引myind
explain select * from dept where loc=‘MsBDpMRX’\G; 不会显示使用到了索引myind
--对于使用like的查询
explain select * from dept where dname like ‘%rjTUPqjZvf’\G; 不会显示使用到了索引myind
explain select * from dept where dname like ‘rjTUPqjZvf%’\G; 会显示使用到了索引myind
--如果条件中有or,即使其中有条件带索引也不会使用
--为了演示,我们把复合索引删除,然后只在dname上加入索引.
alter table dept drop index myind  www.2cto.com  
alter table dept add index myind (dname)
explain select * from dept where dname=‘aaa’ or loc=‘aa’\G;//就不会使用到dname列上的
--如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引
select * from dept from dname=1234\G //不会使用到索引
select * from dept from dname=‘1234’\G //会使用到索引
 
查看索引的使用情况show status like ‘Handler_read%’; handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
handler_read_rnd_next:这个值越高,说明查询低效。
 
有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。
如果想要在含有or的查询语句中利用索引,则or之间的每个条件列都必须用到索引,如果没有索引,则应该考虑增加索引
MyISAM 在插入数据时,默认放在最后.,删除数据后,空间不回收.(不支持事务和外键)
InnoDB支持事务和外键
 
在精度要求高的应用中,建议使用定点数来存储数值,以保证结果的准确性
create table temp1( t1 float(10,2), t2 decimal(10,2));
insert into temp1 values(1000000.32,1000000,32); 发现 t1 成了 1000000.31 所以有问题.
对于存储引擎是MyISAM的,如果经常做删除和修改记录的操作,要定时执行optimize table table_name;功能对表进行碎片整理。 
create table temp2( id int) engine=MyISAM;
insert into temp2 values(1); insert into temp2 values(2); insert into temp2 values(3);
insert into temp2 select * from temp2;--复制
delete from temp2 where id=1; 发现 该表对于的数据文件没有变小
定期执行 optimize table temp2 发现表大小变化,碎片整理完毕
&&对于InnoDB它的数据会存在data/ibdata1目录下,在data/数据库/只有一个 *.frm表结构文件.
 
如果一个表的记录数太多了,如果我拆成100个表,那么每个表只有10万条记录。一个好的拆分依据是 最重要的。UNIO
有些表记录数并不多,可能也就2、3万条,但是字段却很长,表占用空间很大,检索表时需要执行大量I/O,严重降低了性能。这个时候需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。 (JOIN)

“mysql语句的优化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql语句的优化

本文链接: https://www.lsjlt.com/news/59322.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql语句的优化
    本篇内容介绍了“mysql语句的优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! MySQL客...
    99+
    2022-10-18
  • MySQL语句的优化方法
    本篇内容主要讲解“MySQL语句的优化方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL语句的优化方法”吧! 1.建立基准,建立基准,建立基...
    99+
    2022-10-18
  • MySQL语句的优化原则
    这篇文章主要讲解了“MySQL语句的优化原则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL语句的优化原则”吧!1、使用索引来更快地遍历表。  缺省...
    99+
    2022-10-18
  • MySQL之优化SELECT语句
    MySQL之优化SELECT语句 文章目录 MySQL之优化SELECT语句摘要:引言:1. MySQL性能提成优化概述2. WHERE子句优化3. 范围优化4. 哈希联接优化5. 储存引擎下的优化6. 索引条件下推优化7....
    99+
    2023-08-16
    mysql 数据库 原力计划
  • 优化一个mysql语句
    优化了一个mysql的语句,没有什么技术含量,说一下过程:优化前语句如下,大约执行时间为1-2秒select  u.id ,u.s_user_name,u.s_use...
    99+
    2022-10-18
  • mysql查询语句优化
     这篇说下mysql查询语句优化 是否请求了不需要的数据 典型案例:查询不需要的记录,多表关联时返回全部列,总是取出全部列,重复查询相同的数据。 是否在扫描额外的记录 ...
    99+
    2022-05-11
    mysql
  • MySQL语句如何优化
    MySQL语句如何优化,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  开启慢查询日志,配置样例:  [mysqld] log-slow-qu...
    99+
    2022-10-18
  • Mysql 优化LEFT JOIN语句
    1.首先说一下个人对LEFT JOIN 语句的看法,原先我是没注意到LEFT JOIN 会影响到性能的,因为我平时在项目开发中,是比较经常见到很多个关联表的语句的。 2.阿里巴巴手册说过,连接表的语句...
    99+
    2023-08-31
    mysql 数据库
  • MySQL优化之三:SQL语句优化
    一 SQL语句优化的一般步骤:1 通过show status命令了解各种SQL语句的执行频率mysql> show status;      ...
    99+
    2022-10-18
  • mysql的sql语句如何优化
    要优化MySQL的SQL语句,可以采取以下几个方法:1. 使用索引:使用适当的索引可以大大提高查询性能。可以使用`EXPLAIN`命...
    99+
    2023-09-27
    mysql sql
  • MySQL优化SQL语句的技巧
    在面对不够优化、或者性能极差的SQL语句时,我们通常的想法是将重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升。而在重构SQL时,一般都有一定方法技巧可供参考,本文将介绍如何通过这些技巧...
    99+
    2022-05-24
    MySQL 优化 mysql sql语句 mysql 优化sql语句
  • MySQL常见的sql优化语句
    本篇内容介绍了“MySQL常见的sql优化语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大批量插入数据...
    99+
    2022-10-18
  • mysql数据库优化语句
    本篇内容主要讲解“mysql数据库优化语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql数据库优化语句”吧!mysql优化语句 数据库语句:...
    99+
    2022-10-18
  • MySQL 查询语句优化的实现
    子查询优化 将子查询改变为表连接,尤其是在子查询的结果集较大的情况下;添加复合索引,其中复合索引的包含的字段应该包括 where 字段与关联字段;复合索引中的字段顺序要遵守最左匹配原则;mysql 8 中自动对...
    99+
    2023-04-20
    MySQL 查询语句优化 MySQL 查询语句
  • MySQL中的SQL语句怎么优化
    这篇文章将为大家详细讲解有关MySQL中的SQL语句怎么优化,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。结构化查询语言(Structured Query Languag...
    99+
    2022-10-18
  • MySQL group by语句如何优化
       在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1\G *****...
    99+
    2022-05-13
    MySQL group by MySQL group by 优化
  • MySQL中如何优化orderby语句
    order by 查询语句使用也是非常频繁,有时候数据量大了会发现排序查询很慢,本文就介绍一下 MySQL 是如何进行排序的,以及如何利用其原理来优化 order by 语句。 建立...
    99+
    2023-01-12
    MySQL优化order by 优化order by
  • MySQL中join语句怎么优化
    目录Simple Nested-Loop Joinblock Nested-Loop JoinIndex Nested-Loop Join如何选择驱动表?Simple Nested-Loop Join 我们来看一下当进行...
    99+
    2023-03-03
    MySQLjoin优化 MySQLjoin语句
  • MySQL中join语句如何优化
    今天小编给大家分享一下MySQL中join语句如何优化的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Simple Neste...
    99+
    2023-07-05
  • MySQL语句优化的方法有哪些
    有以下几种常见的MySQL语句优化方法:1. 添加索引:通过为经常用于查询的列添加索引,可以提高查询的性能。索引可以加快查询的速度,...
    99+
    2023-09-16
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作