Below you will find pages that utilize the taxonomy term “查询优化”
July 10, 2013
mysql中innodb表的count优化
"作/译者:叶金荣(imysql#imysql.com\u0026gt;),来源: http://imysql.com,欢迎转载。\n起因:在innodb表上做count(*)统计实在是太慢了,因此想办法看能不能再快点。\n现象:先来看几个测试案例,如下\n一、 sbtest 表上的测试\nshow create table sbtest\\G *************************** 1. row *************************** Table: sbtest Create Table: CREATE TABLE `sbtest` ( `aid` bigint(20) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL default \u0026#39;0\u0026#39;, `k` int(10) unsigned NOT NULL default \u0026#39;0\u0026#39;, `c` char(120) NOT NULL default \u0026#39;\u0026#39;, `pad` char(60) NOT NULL …"
October 26, 2011
MySQL 数据库性能优化之缓存参数优化[转载]
"在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助。\n这是本系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化\n数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:\nquery_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache 功能,MySQL在接受到一 …"
July 13, 2010
发现瓶颈 – Profiling(程序剖析) -MySQL Profiling
"MySQL程序剖析 (Profiling)\n我们将要详细的讲到MySQL的剖析(Profiling),因为它很少依赖于你的应用。应用和服务器 级别的剖析有的时候都是有必要的。虽然应用级别的剖析可以给你整个应用性能的总揽。,但是对MySQL的剖析提供了信息是服务器级别所提供不了的。比如, 对PHP代码进行剖析不会显示MySQL有多少行语句执行了。\n与应用剖析一样,目标是找出MySQL哪部分消耗过多的时间。我们不会剖析MySQL源码的,虽然有的 时候定制化MySQL安装很有用,但是这是另一本书的主题了。所替代的是,我们将教你一些可以技术来获取和分析不同种类的MySQL执行语句的信息。\n你可以用在任意的颗粒级别以满足你的需求:你可能对整个服务器进行剖析或者单独检查一个语句或者一组语 句。下列信息你可以一点点的收集:\nMySQL经常访问的那些数据 MySQL经常执行语句的类型 MySQL线程大部分时间的状态 MySQL经常执行语句的子系统 MySQL执行语句所访问的数据类型 不同活动的类型,比如扫描索引。 我们先从范围最广的剖析开始,那就是服务器剖析,将教你更多细节。 …"
July 13, 2010
查看mysql索引使用情况
"查看索引使用情况\n如果索引正在工作, Handler_read_key 的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。\nHandler_read_rnd_next 的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明表索引不正确或写入的查询没有利用索引。\n语法:\nmysql\u0026gt; show status like ‘Handler_read%’;\n有关更多MySQL之Handler_read_*介绍参考:"
July 9, 2010
show profiles 详解
"https://dev.mysql.com/doc/refman/5.7/en/show-profile.html\n此功能将在新版本中被移除,性能分析使用新方法来代替。(官方提供了此命令的使用方法, 对于 show profile for query ID / show profile CPU for query ID 结果中每项的说明信息请参考: https://www.cnblogs.com/itcomputer/articles/5056127.html)\nNote\nThese statements are deprecated and will be removed in a future MySQL release. Use the Performance Schema instead; see Chapter 25, MySQL Performance Schema.\n对于新版本我们也可以直接查询 INFORMATION_SCHEMA PROFILING . See Section 25.20, “The INFORMATION_SCHEMA PROFILING …"
July 2, 2010
MySQL之Handler_read_*
"在MySQL里,我们一般使用 SHOW STATUS 查询服务器状态,语法一般来说如下:\nSHOW [GLOBAL | SESSION] STATUS [LIKE ‘pattern’ | WHERE expr]\n执行命令后会看到很多内容,其中有一部分是Handler_read_*,它们显示了数据库处理SELECT查询语句的状态,对于调试SQL语句有很大意 义,可惜实际很多人并不理解它们的实际意义,本文简单介绍一下:\n为了让介绍更易懂,先建立一个测试用的表:\nCREATE TABLE IF NOT EXISTS foo (\nid int(10) unsigned NOT NULL auto_increment,\ncol1 varchar(10) NOT NULL,\ncol2 text NOT NULL,\nPRIMARY KEY (id),\nKEY col1 (col1)\n);\nINSERT INTO `foo` (`id`, `col1`, `col2`) VALUES (1, ‘a’, ‘a’), (2, ‘b’, ‘b’), (3, ‘c’, ‘c’), (4, ‘d’, ‘d’), …"
July 2, 2010
根据status信息对MySQL服务器进行优化[精典]
"对于SQL查询语句对于服务器系统资源的使用情况见:发现瓶颈 – Profiling(程序剖析) -MySQL Profiling\n网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的 情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化。\nmysql\u0026gt; show global status;\n可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:\nmysql\u0026gt; show variables;\n一、慢查询\nmysql\u0026gt; show variables like ‘%slow%’; +——————+——-+ | Variable_name | Value | +——————+——-+ | log_slow_queries | ON | | slow_launch_time | 2 | +——————+——-+\nmysql\u0026gt; show global status like ‘%slow%’; …"
June 27, 2010
关于MySQL explain 中的ID(推荐)
"Explain ID详解\n含义:select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。\nid的情况有三种,分别是:\nid相同表示加载表的顺序是从上到下。 id不同id值越大,优先级越高,越先被执行。 id有相同,也有不同,同时存在。id相同的可以认为是一组,从上往下顺序执行;在所有的组中,id的值越大,优先级越高,越先执行。 再看一个查询计划的例子:\n执行顺序依次为 4 -\u0026gt; 3 -\u0026gt; 2 \u0026gt; 1 \u0026gt; NULL\n第一行:id列为1,表示第一个select,select_type列的primary表示该查询为外层查询,table列被标记为,表示查询结果来自一个衍生表,其中3代表该查询衍生自第三个select查询,即id为3的select。[select d1.name……]\n第二行:id为3,表示该查询的执行次序为2(4→3),是整个查询中第三个select的一部分。因查询包含在from中,所以为derived。[select id,name from t1 where other_column=”]\n第三行:select列表 …"
April 25, 2010
mysql查询中in和多个or的区别
"比较IN()里面的数据 许多数据库服务器都只把IN()看作多个OR的同义词,因为它们在逻辑上是相等的。MYSQL不是这样的,它会对IN()里面的数据进行排序,然后用二分法查找个是否在列表中,这个算法的效率是O(Logn),而等同的OR子句的查找效率是O(n)。在列表很大的时候,OR子句就会变得慢得多。\n这里的语句和Oracle数据库里是一样的。"
January 24, 2010
mysql优化一般步聚(教程)
"1.1优化SQL的一般步骤\n11.1.1 通过show status和应用特点了解各种SQL的执行频率\n通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladminextended- status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global 级别的统计结果。\n以下几个参数对Myisam和Innodb存储引擎都计数:\nCom_select 执行select操作的次数,一次查询只累加1;\nCom_insert执行insert操作的次数,对于批量插入的insert操作,只累加一次;\nCom_update执行update操作的次数;\nCom_delete 执行delete操作的次数;\n以下几个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:\nInnodb_rows_read select查询返回的行数;\nInnodb_rows_inserted执行Insert操作插入的行数;\nInnodb_rows_updated执行update操作更新的行数;\nInnodb_rows_deleted 执行delete操作删除的行 …"
December 25, 2008
mysql limit查询优化
"MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。\n同样是取10条数据\nselect * from yanxue8_visit limit 10000,10 和\nselect * from yanxue8_visit limit 0,10\n就不是一个数量级别的。\n网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。\n文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)\n1、offset比较小的时候。\nselect * from yanxue8_visit limit 10,10\n多次运行,时间保持在0.0004-0.0005之间\nSelect * From …"