Monty说MySQL的优化(七)

2016-02-19 18:02 2 1 收藏

今天图老师小编给大家展示的是Monty说MySQL的优化(七),精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

  三十一、事务的例子

  MyIASM表如何进行事务处理:

  mysql LOCK TABLES trans READ, customer WRITE;

  mysql select sum(value) from trans where customer_id=some_id;

  mysql update customer set total_value=sum_from_previous_statement

  where customer_id=some_id;

  mysql UNLOCK TABLES;

  BDB表如何进行事务:

  mysql BEGIN WORK;

  mysql select sum(value) from trans where customer_id=some_id;

  mysql update customer set total_value=sum_from_previous_statement

  where customer_id=some_id;

  mysql COMMIT;

  注意你可以通过下列语句回避事务:

  UPDATE customer SET value=value+new_value WHERE customer_id=some_id;

  三十二、使用REPLACE的例子

  REPLACE的功能极像INSERT,除了如果一条老记录在一个唯一索引上具有与新纪录相同的值,那么老记录在新纪录插入前则被删除。不使用 SELECT 1 FROM t1 WHERE key=#

  IF found-row

  LOCK TABLES t1

  DELETE FROM t1 WHERE key1=#

  INSERT INTO t1 VALUES (...)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  UNLOCK TABLES t1;

  ENDIF

  而用

  REPLACE INTO t1 VALUES (...)

  三十三、一般技巧

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  使用短主键。联结表时使用数字而非字符串。

  当使用多部分键码时,第一部分应该时最常用的部分。

  有疑问时,首先使用更多重复的列以获得更好地键码压缩。

  如果在同一台机器上运行MySQL客户和服务器,那么在连接MySQL时则使用套接字而不是TCP/IP(这可以提高性能7.5%)。可在连接MySQL服务器时不指定主机名或主机名为localhost来做到。

  如果可能,使用--skip-locking(在某些OS上为默认),这将关闭外部锁定并将提高性能。

  使用应用层哈希值而非长键码:

  SELECT * FROM table_name WHERE hash=MD5(concat(col1,col2)) AND

  col_1='constant' AND col_2='constant'

  在文件中保存需要以文件形式访问的BLOB,在数据库中只保存文件名。

  删除所有行比删除一大部分行要快。

  如果SQL不够快,研究一下访问数据的较底层接口。

  三十四、使用MySQL 3.23的好处

  MyISAM:可移植的大表格式

  HEAP:内存中的表

  Berkeley DB:支持事务的表。

  众多提高的限制

  动态字符集

  更多的STATUS变量

  CHECK和REPAIR表

  更快的GROUP BY和DISTINCT

  LEFT JOIN ... IF NULL的优化

  CREATE TABLE ... SELECT

  CREATE TEMPORARY table_name (...)

  临时HEAP表到MyISAM表的自动转换

  复制

  mysqlhotcopy脚本

  三十五、正在积极开发的重要功能

  改进事务处理

  失败安全的复制

  正文搜索

  多个表的删除(之后完成多个表的更新)

  更好的键码缓存

  原子RENAME (RENAME TABLE foo as foo_old, foo_new as foo)

  查询高速缓存

  MERGE TABLES

  一个更好的GUI客户程序

来源:https://www.tulaoshi.com/n/20160219/1616660.html

延伸阅读
但请注意,下面的优化并不是完全的。MYSQL实施了许多优化,但我没时间全部测试. MySQL的一些优化列在下面: 删除不必要的括号: ((a AND b) AND c OR (((a AND b) AND (c AND d)))) - (a AND b AND c) OR (a AND b AND c AND d) 常数调入: (ab AND b=c) AND a=5 - b5 AND b=c AND a=5 删除常数条件: (B=5 AND B=5) OR (B=6 AND 5=5) O...
在发布一个选择行的查询时, MySQL进行分析,看是否能够对它进行优化,使它执行更快。本文我们将研究查询优化程序怎样工作。更详细的信息,可参阅MySQL参考指南中的“Getting Maximum Performance from MySQL”,本文描述了MySQL采用的各种优化措施。(http://www.mysql.com/ 处的MySQL联机参考指南在不断地更新。) MySQL查询优化程...
4.2 MySQL查询优化程序 在发布一个选择行的查询时, MySQL进行分析,看是否能够对它进行优化,使它执行更快。本节中,我们将研究查询优化程序怎样工作。更详细的信息,可参阅MySQL参考指南中的Getting Maximum Performance from MySQL,该章描述了MySQL采用的各种优化措 施。该章中的信息会不断变化,因为MySQL的开发者不断对优...
如果使用的是MySQL 5.0.x 可以直接将以下内容保存替换MySQL中的my.ini,记得要修改basedir和datadir两个栏目的路径。 代码如下: [client] port=3306 [mysql] default-character-set=gbk [mysqld] port=3306 basedir="D:/web/mysql/" datadir="D:/web/mysql/Data/" default-character-set=gbk default-storage-engine=MYISAM max_co...
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是...

经验教程

691

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部