当前位置:文档之家› 2015年辛星mysql教程第四本优化建模

2015年辛星mysql教程第四本优化建模

2015年辛星mysql教程第四本优化建模
2015年辛星mysql教程第四本优化建模

2015年mysql教程春季版

第四本:优化建模

*******************温馨提示*******************************

1.百度搜索“辛星 mysql”可以找到更多更全更新的资料奥。

2.辛星教程,时刻在进步。

*************2015年辛星mysql教程春季版*******************

1.辛星mysql教程起源于2014年8月,当时原计划写五本,但是只发布了一本,在我参考了相关资料后,决心打乱原有顺序,重新布局。

2.经过了五个月的编写与修改,最后的书单如下:

3.希望这套书对您的成长有所帮助,如果能够所帮助,我就倍感荣幸了,对于本书的缺点,也希望您能及时告诉我。

*********************纲领******************************** 纲领:传播知识,传递温情。

特色:更新更全更实用。

**********************寄语********************************* 前进的道路,辛星陪伴您。只要星哥在,编程充满爱。争取做最优秀的、最开放的教程体系。

***********************************************************

**************目录*****************************************

本书概要 (3)

第一节:建表详解 (4)

第二节:数据类型(上) (13)

第三节:数据类型(下) (37)

第四节:范式与反范式 (59)

第五节:建模实践 (70)

第六节:建模经验 (75)

第七节:优化基础 (81)

第八节:索引 (94)

第九节:数据碎片 (110)

致敬读者 (114)

*********************************************************

********************联系我*******************************

个人邮箱:xinguimeng@https://www.doczj.com/doc/201994323.html,

个人博客:https://www.doczj.com/doc/201994323.html,/xinguimeng,在博客中有我全部资料的下载地址奥。

**********************************************************

本书概要

*********************概述****************************

1.这本书在以后的教程中可能会拆成两本来写,一本写MySQL的优化,一本写MySQL的建模,虽然这两个话题的相似程度并不高,

但是本次我们还是写到了一本中。

2.所谓MySQL的优化,真的是包罗万象,而且对于不同的应用环境,它的优化的侧重点也不同,对服务器硬件的优化,对运行参数的优化,对索引的优化,对SQL语句的优化,对应用程序的优化,对架

构设计的优化,随着教程的逐步深入,优化肯定会独立成一本书。

3.所谓MySQL的建模,相对于知识,它更加侧重于经验和应用环境,不过一般来说,这部分通常是团队内最有经验的人来负责,因此一

般来说读者只需要大概了解建模的要点即可。

*****************知识结构******************************

1.可能在目前来说,知识结构上仍有疏漏之处,我也参考了大量前

人的书籍,但是我发现它们的出发点各不相同,主要问题还是个人

经历的不同,开发问题的角度不同,思考问题的角度不同。

2.为了稳妥起见,我并没有大刀阔斧的进行改进,我还是比较保守

的取它们的交集进行了介绍,也就是说我的教程中所介绍的知识,

是绝大多数书中都有介绍的。

3.在优化这部分,对于硬件、操作系统、文件系统这类问题,虽然

它们很重要,但是它对特定情况的理解太重要了,于是我选择了简

单介绍,对于索引、查询语句、慢查询这类大众话题,我还是希望

读者朋友们能够有一个深入的理解。

4.在建模这部分,它的理论基础和实践经验基本是五五开的,所谓

理论基础即关系数据库理论、范式、反范式等几大块,对于实践经

验则很难有个定论了,因为对于应用的不同类型,不同的硬件配置,不同的性能要求,太多的不同导致了某个建议在一种情况下大幅度

提高性能,在另一种情景下却是累赘。

5.不过大家不用担心,由于我在这部分讲解的比较保守,因此它的

结论适合于绝大多数场景。

**********************************************************

第一节:建表详解

************************概述******************************

1.对于建表,我们目前还没有学习完整的建表语句,这一节我们就来补充一些基本概念。

2.建表的时候有修饰符的概念,它的学名叫做”完整性约束”,是为了保证数据库中的完整性而制定的一套规范。

3.对于具体的修饰符,我们这里介绍几个比较关键的。

****************主键**************************************

1.对于一些事物,我们有时候可以用一些特征或者信息来唯一的确定它,在数据库中,也有类似的概念,我们称之为”主键”.

2.主键有两大特性:唯一性和排他性。

3.所谓唯一性,即一个表里面只能有一个主键,关系数据库不允许我们有两个主键,它的根本原因是为了防止存储冗余数据。

4.所谓排他性,就是一个表里面不允许有两条记录有共同的主键,它的根本原因是为了防止我们存储错误数据。

5.就像我们国家用身份证号作为公民身份的唯一标识(唯一性),而且公民的身份证号必须是唯一的(排他性),这与我们数据库的思想是想通的。

6.要声明一个主键,可以在创建数据表的时候就声明,我们可以在写完所有的字段之后,加一个primary key(字段1,字段2....)这样来表示一个主键。

7.下面我们创建一个以gid和uid为主键的表,范例:

8.我们可以插入两条数据,比如:

9.当我们再次插入(1,1)的时候,发现问题来了,它会报错说主键重复,我们看如下范例:

10.注意(gid,uid)是一个主键,这里的顺序是很重要的,也就是(3,2)

和(2,3)是两个主键,我们看操作如下:

11.我们发现,我们想插入主键重复的数据是根本做不到的,因为MySQL会拒绝执行我们的SQL语句,这就从很大程度上避免了错

误的产生。

**************唯一字段主键和自增**************************

1.上面我们使用了两个字段作为主键,我们在生产环境中更加倾向

于用一个字段来作为主键,就像我们的身份证号一样,这样的最大

好处就是处理方便,毕竟处理一个字段比处理两个字段要方便的多。

2.我们上面是在声明完所有字段之后使用primary key这种方式来

定义一个主键,它可以在括号中用逗号来使得多个字段作为主键。

3.其实我们还可以在某一列结束的时候加一个修饰符primary key,表示这个字段是一个主键,它只能作用与一个字段为主键的情况。

4.咱们可以用一个正整数类型的字段表示主键,它通常还拥有一些特性,比如我们后面会介绍的自增(我们不设置其值的时候会自动填充值,而且值比上一条记录的对应值加1),比如非空(不允许该条记录的其他某一个字段有值,但是该字段没有值).

5.那么咱们指定一个正整数的id主键的方式通常是这样的:

id int primary key auto_increment

6.这样当我们想数据库中填充数据的时候,不必指定它的值,它会自动增加,非常方便。

7.那么我们可以创建一个t2表,我们看如下范例:

8.这里我们可以只指定填充相应的level值,它的id值是可以自动填充的,比如如下范例:

9.那么我们可以看一下该表中的数据:

10.当然我们可以修改这个自增值,这里我们使用alter table

auto_increment=值;的方式来修改,这里我们不妨设置为100,操作范例:

11.当然当我们再次插入数据的时候,这里我们还是只是指定level的数据,范例操作:

12.那么我们插入的这三条数据的相应的id值是多少呢?我们可以看一下具体的数值为:

13.通过上面的操作,相信朋友们已经对自增有了一个相对清晰的了解了,下面我们就来归纳一下要点吧。

14.自增只能用在整数上,而且如果我们不向该字段插入值的时候,那么每次插入的下一条记录中的对应字段比上一条记录中的对应字段的值加1.

15.设置自增之后,我们可以不使用它的自增属性,也就是我们直接给该字段赋值,那么它还是用我们的赋的值填充该字段。

16.这里我们看一下具体的操作效果吧:

17.那么这里考考朋友们,如果我们再次插入一条记录的时候,如果

我们插入空值,那么id的下一个是多少呢?答案是445,我们看一

下吧:

18.对于主键和自增,我们就讲到这里啦。

*********************非空**********************************

1.我们可以在一个字段的后面加上一个修饰符not null表示非空。

2.如果我们指定了一个字段非空,那么当我们插入一条记录的时候,如果不指定该字段的值,就无法插入。

3.这里有必要说一下,那就是主键自动会加上not null修饰符,因

此我们在被primary key修饰的字段是不能为空的。

************不可重复**************************************

1.我们可以在字段后面使用unique来表示该字段的值不能重复。

2.如果我们视图插入该字段重复的值,那么MySQL会报错拒绝执行。

3.primary key包含了unique效果的,如果一个字段被primary

key修饰,那么就不用unique修饰符了。

**************默认值***************************************

1.有时候我们可以指定默认值,就是在我们插入了一条记录之后,但是没有向某个字段赋值的时候,这时候就可以使用默认值的方式来让该字段自动获得一个值。

2.我们可以在字段的后面添加一个 default 默认值来表示该字段的默认取值。

********************统一演示*******************************

1.对于上面的介绍,我还是通过一些实例来进行相应的演示吧,这样朋友们可能在使用上更加熟练一些。

2.我们看如下建表范例:

3.上面我们创建了一个people表,它有两个字段,第一个是id,它是非空不允许重复的,第二个是num,它是非空并且默认值为60.

4.当我们向people的num字段不插入数据的时候,它会自动用60代替,范例如下:

5.那么我们可以看一下此时people中的数据,我们可以看到真实填充的数据为:

6.但是当我们向num字段插入null的时候是会报错的,如下范例:

7.如果我们不指定id的值,我们插入的时候又会怎么样呢?我们看如下范例:

8.那么people表内都存储了哪些数据呢?我们来看一下:

9.但是当我们再次不给id指定值的时候,也就是 MySQL会重复插入0,那么就会出现重复的错误了,我们看下面操作实例:

10.这里就是当插入值0的时候冲突了,就是因为unique的原因,不过这里我们只是使用unique来指定为不可重复,但是并没有指定为自增或者给予默认值。

******************说明*************************************

1.我们之后还会学习其他的修饰符,但是它们多数和特定的数据类型有关,因此我们还是到了特定的数据类型的时候再说吧。

2.一般来说,对于建表的常用的修饰符我们还是了解的了,接下来我们就需要花些时间来好好了解MySQL的数据类型了。

第二节:数据类型(上)

***********为何需要数据类型*******************************

1.第三代编程语言普遍支持”数据类型”这个概念,比如Pascal支持”

记录”,C语言支持”指针”,比如Python支持”字典”,比如PHP支持”资源”类型,而Ruby则支持”区间”.

2.可能很多语言支持自己独特的数据类型,但是它们也往往支持一

些共同的数据类型,比如”字符串”、”整型”、”浮点型”、”布尔类型”

等等,因为它们太常用了。

3.虽然它们风格迥异,实现原理也不尽相同,但是究其根本原因,

还是为了方便开发者的使用。

4.我们MySQL为了存储数据的时候可以达到更高的效率,对数据类型的划分可能和编程语言有较大区别,它更多的是用来确定存放使

用的空间大小和类型。

5.因此MySQL所支持的数据类型和编程语言所支持的数据类型看起来差别还是蛮大的。

****************MySQL数据类型****************************

1.不同版本的MySQL支持的数据类型也可能稍有不同,不过总的来

说改动并不大。

2.我们可以在MySQL命令控制台上查看当前版本支持的所有的数据类型,我们使用”? data types”即可查看所有的数据类型,如下操作:

3.如果我们要查看某一种具体的数据类型,我们就可以使用”? 数据

类型”的方式来查看某一种具体的数据类型,比如我们要查看int这

种数据类型:

4.MySQL支持的数据类型还是比较多的,在之前版本中我们介绍了27种,在这个版本里我们争取介绍的全面一点,它的列表如下:

5.可能不同的资料中对于数据类型的分法是不一样的,有人把blob

和text单独列出去,还有的把复合类型也划分到字符串里面来,还

有人会忽略位类型。

6.在这里,我还是主张我这种分法,当然各种分类都有自己的依据,我们需要做的就是深入了解他们。

*************数据类型的重要性****************************

1.合理的使用并了解它们的区别对于数据库建模的作用尤其明显,

那么我们存储一个ip地址可以有多少种存法呢?

2.对于老手来说,可能感觉只有一种存法,没错,但是在新手朋友

们眼里,这个问题可以有很多种解决方案了。

3.比如我们还是存储南开大学选课系统的ip地址,也就是

222.30.32.10,这里我们直接存储明文。

4.那么第一种方式就是存储一个整数”222030032010”,然后我们解

析的时候每三位加一个点,我们只需要不断的模1000就可以了,它需要使用bigint,占据8个字节。

5.第二种方式就是存储一个字符串,也就是”222.30.32.10”,不论是

使用char还是varchar,它占据的字节数从7到15不等,它基本不

用解析。

6.第三种方式认为ip地址的每一个数据都可以转化为两个16进制数,于是该ip可以存储为de1f200a,它此时需要8个字节。

7.第四种方式认为我们存储3726516234即可,这个数据是怎么来

的呢?它是222*256*256*256+30*256*256+32*256+10计算得到的,我们转化为ip地址的时候通过取模和商即可,它需要int类型,占据4个字节。

8.对于上面四种存储方案,我们可以看到它们存储同样的数据占用

的空间大小是有差别的:

9.那么对于老手又该怎么存储呢?老手肯定会存储为int类型的,不

过需要存储为unsigned的,也就是不包含负数的,我们建表如下:

10.然后我们怎么存储呢?其实MySQL给我们提供了一个内置函数,

专门用于IP地址的转换,我们看一下具体的操作:

11.然后我们可以查看一下ip表中存储的数据,看到了吧,它和我们第四种方案存储的数据应该是一致的:

12.那么我们怎么来得到我们想要的IP地址呢?我们只需要使用

inet_ntoa即可了,如下范例:

13.好吧,上面只是对IP的存储的一个范例,接下来我们还是说数据类型方面的事情。

*************数值类型**************************************

1.所谓数值类型,就是存储实数的类型,我们通常可以分为两类:整数类型和浮点数类型。

2.许多不用的子类型对于这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且MySQL允许我们指定数值字段中的值是否有正负之分或者用零填补。

3.我们接下来看一下整数类型。

****************整数类型***********************************

1.MySQL支持五种整数类型:tinyint、smallint、mediumint、int和bigint。

2.这些类型在很大程度上是相同的,只是他们根据所占空间大小的

不同会导致存储的值的范围的不同。

3.下面是各种子类型所占据的字节数的列表:

(1)tinyint占据1字节

(2) smallint占据2字节

(3)mediumint占据3字节

(4)int也叫integer,占据4字节、

(5)bigint占据8字节

4.上面说了,每一种数据类型根据所占据字节数的不同而存储的范

围也会不同,下面我们会讲解。

5.每一种类型都可以通过修饰符unsigned指定为无符号数,否则默

认是有符号的。

***************有符号**************无符号******************

1.如果读者朋友们接触过C或者C++这类语言,那么对有符号和无

符号应该比较清楚了,这里只是帮不了解的朋友们科普下。

2.所谓无符号数,字面意思是无正负之分,实际上就是不包含负数,也就是只包含0和正数。

3.所谓有符号数,也就是包括正数、负数和0.

4.下面我们通过举例的方式来了解一下各种整型的存储范围,比如tinyint是1个字节,即一个byte,它包含8个bit,也就是8位,而每一位都有0和1两种存储状态,因此它的值共计有2的8次方种

状态,也就是256种状态。

5.对于无符号数来说,存储的最大范围就是256减去1,为什么要

减去1呢,因为我们必须分配一种情况给0,即存储范围从0到255.

6.对于有符号数来说,通常使用的是补码来表示。对于1字节的数据,可以存储256种情况,如果是有符号数,那么它的存储范围是

分成负数和非负数两部分的,负数那部分就是256除以2加一个负号,就是从-1到-128,非负数那部分是从0到127.

7.我想对于数据的范围应该很好理解吧,这里就不赘述了。

****************修饰符************************************

1.MySQL在整数类型后面可以跟一个宽度指示器,它可以把显示的

数据值加上到指定的长度来显示,比如int(12)就表示不足12位的数字来屏幕上占据12个数字的位置。

2.值得注意的是,该宽度指示器并不会影响int的取值范围,我们上

面也讲了,int的取值范围是由它所占据的空间的大小决定的,和宽

度指示器没有关系。

3.该宽度指示器只是影响我们显示的格式,而且默认使用空格填充,比如int(12)如果显示23,那么先输出10个空格,然后输出23这个数据。

4.我们可以使用unsigned修饰符来规定字段只保存正值。

5.而zerofill修饰符固定用0而不是空格来填充到宽度指示器的宽度。

6.必须注意的是,由于负数在前面补零毫无意义,因此,使用了zerofill就意味着它是无符号数据。

*****************实战演示**********************************

1.我们首先建立一个表,范例如下:

2.上面我们建立的这个表中,id是int类型,默认显示位数是7位,不足7位的时候用0填充,level是tinyint类型的,默认显示位数

为2位,不足2位的时候用空格填充。

3.然后我们向里面插入数据,操作范例如下:

4.通过上述示例,我们知道位数不足7位的,它会用零填充到7位,然后显示给我们,位数超过7位的,MySQL不会截断它。

5.也有读者朋友们给我反应说,它存入的某些数据被截断了,其实

这里跟宽度指示器没关系,是因为它的大小超出了MySQL相应数

据类型的存储范围,比如我们用tinyint存储大于256的数据,肯定

是会被截断的。

6.如果我们存储的字段信息超过了MySQL的相应数据类型可以存储的范围,MySQL会根据我们允许范围最接近它的一端截断之后,再

存进去。

7.比如说tinyint,如果是有符号数的时候,存储大小为从-128到127,比如我们非要存储一个很大的数,比如23333,那么我们看一下下面的反应:

8.注意这里是在非严格模式下的操作反应,我们插入是成功了的,

但是我们插入的数据明显超过了tinyint的存储范围,那么它存储的

到底是什么东西呢?

9.不过在查看具体的数据之前,我们还是先看一下这个警告:

10.我们通过select可以看到里面的数据如下:

11.对于宽度指示器和范围,我们就练习到这里啦。

*************类型转换************************************

1.有些时候,我们可能需要进行类型转换,比如我们在存储为整数之前可能是浮点数、可能是字符串类型。

2.我们可以看一个插入小数的范例:

3.既然连个警告都没有,那么插入的数据是多少呢?我们来看一下:

sql语句(mysql优化)绝对经典

sql语句(mysql优化)绝对经典 误区1:count(1)和count(primary_key) 优于count(*) 很多人为了统计记录条数,就使用count(1) 和count(primary_key) 而不是count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差,应为数据库对count(*) 计数操作做了一些特别的优化。 误区2:count(column) 和count(*) 是一样的 这个误区甚至在很多的资深工程师或者是DBA 中都普遍存在,很多人都会认为这是理所当然的。实际上,count(column) 和count(*) 是一个完全不一样的操作,所代表的意义也完全不一样。count(column) 是表示结果集中有多少个column字段不为空的记录,count(*) 是表示整个结果集有多少条记录 误区3:select a,b from … 比select a,b,c from …可以让数据库访问更少的数据量 这个误区主要存在于大量的开发人员中,主要原因是对数据库的存储原理不是太了解。实际上,大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作block 或者page)为单位,一般为4KB,8KB… 大多数时候,每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)。 所以,我们是取一个字段还是多个字段,实际上数据库在表中需要访问的数据量其实是一样的。当然,也有例外情况,那就是我们的这个查询在索引中就可以完成,也就是说当只取a,b两个字段的时候,不需要回表,而c这个字段不在使用的索引中,需要回表取得其数据。在这样的情况下,二者的IO量会有较大差异。(覆盖索引) 误区4:order by 一定需要排序操作 我们知道索引数据实际上是有序的,如果我们的需要的数据和某个索引的顺序一致,而且我们的查询又通过这个索引来执行,那么数据库一般会省略排序操作,而直接将数据返回,因为数据库知道数据已经满足我们的排序需求了。实际上,利用索引来优化有排序需求的SQL,是一个非常重要的优化手段。延伸阅读:MySQL ORDER BY 的实现分析,MySQL 中GROUP BY 基本实现原理以及MySQL DISTINCT 的基本实现原理。(order by null)

wxformbuilder界面设计工具入门与进阶

wxPython界面设计入门及进阶 作者:Justin@JinRui Garden 原文整理自:https://www.doczj.com/doc/201994323.html,/blog/archives/434等 1wxPython界面设计利器:wxFormBuilder 之前我曾经介绍过wxPython界面设计的工具BOA(见这里),但是那个主题只有一篇文章,不是因为我太懒,而是BOA在稳定性和工具风格上不太合我的胃口。相对于功能追求全面而强大的BOA,wxFormBuilder则只专注于UI的设计,并生成框架代码,和GTK的工具Glade非常相似。 wxFormBuilder并不是为wxPython而生,它不仅可以生成Python代码,还支持生成C++和XRC代码。的确是使用wxWidget用户的福音! wxFormBuilder对于初始次用的用户来说,确实上手不太容易,因为在它的工程中,无法看到一整个wx.App()。在wxFormBuilder的概念中,UI的承载容器是:Frame、Panel、Dialog、MenuBar和ToolBar等组件。所以在创建好这些UI组件之后,还需要手动创建一个wx.App()使这些组件能够展现给用户。 使用wxFormBuilder进行设计的步骤是: 1、首先增加上述所说的组件; 2、在组件中放入各种Sizer; 3、添加各种控件; 4、添加控件响应动作; 5、自动生成代码;然后就可以根据自己的需要,对代码进行重新组织了。 在这个过程中,wxFormBuilder只负责界面布局、事件绑定和事件接口初始化的部分;剩下的完全由用户来发挥了。 2wxFormBuilder入门 在上一篇博客中,我专门介绍了wxPython的UI设计工具:wxFormBuilder。这篇博客中将对wxFormBuilder进行细致深入的介绍。 此文注定是一篇长长的文章,一共分为如下几个部分:1、wxFormBuilder的安装;2、创建工程前的准备;3、创建第一个工程;4、编写业务逻辑代码。 本文中示例所使用的操作系统是Ubuntu10.04LTS,wxFormBuilder版本为3.2.3-beta。

wxPython之wx.font类_光环大数据Python培训

https://www.doczj.com/doc/201994323.html, wxPython之wx.font类_光环大数据Python培训wxPython之wx.font类。 一个wx.Font类实例的对象是确定一个文本的外观。 构造函数 wx.Font(pointSize,family,style,weight,underline,faceName,encoding ) pointSize pointSize是字体的以磅为单位的整数尺寸。 family family用于快速指定一个字体而无需知道该字体的实际的名字.字体的准确选择依赖于系统和具体可用的字体.你所得到的精确的字体将依赖于你的系统。字体类别如下: wx.DECORATIVE:一个正式的,老的英文样式字体。 wx.DEFAULT:系统默认字体。 wx.MODERN:一个单间隔(固定字符间距)字体。 wx.ROMAN:serif字体,通常类似于TimesNewRoman。 wx.SCRIPT:手写体或草写体。

https://www.doczj.com/doc/201994323.html, wx.SWISS:sans-serif字体,通常类似于Helvetica或Arial。 style style参数指明字体的是否倾斜,它的值有: wx.NORMAL, wx.SLANT, wx.ITALIC weight weight参数指明字体的醒目程度,他的值有: wx.NORMAL, wx.LIGHT, wx.BOLD underline underline参数仅工作在Windows系统下,如果取值为True,则加下划线,False为无下划线。 faceName faceName参数指定字体名。 encoding encoding参数允许你在几个编码中选择一个,它映射内部的字符和字本显示字符。编码不是Unicode编码,只是用于wxPython的不同的8位编码。大多数情况你可以使用默认编码。

优化mysql数据库性能

为了提高性能建议作如下优化修改: 优化mysql数据库性能的参数: (1)、max_connections: 允许的同时客户的数量。增加该值增加mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到too many connections错误。默认数值是16384,请根据实际情况设置此参数。 (2)、key_buffer_size: 索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是10M,请根据实际情况设置此参数。 (3)、sort_buffer: 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速order by或group by操作。默认数值是256K,请根据实际情况设置此参数。 4)、table_cache: 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。mysql对每个唯一打开的表需要2个文件描述符。默认数值是256,,请根据实际情况设置此参数。 (5)、thread_cache_size: 可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能修改这个变量值。通过比较connections 和threads_created 状态的变量,可以看到这个变量的作用。默认数值是8,请根据实际情况设置此参数。 注:以上参数的调整可以通过修改C:\AppServ\MySQL\my.ini 文件并重启mysql 实现。这是一个比较谨慎的工作,上面的结果只供参考,请根据具体主机的硬件情况(特别是内存大小)进一步修改。 优化配置文件: C:\zxin10\Was\tomcat\conf\ server.xml (6)、在server.xml中修改标红相关参数。 (7)、

mysql服务性能优化my_cnf配置说明详解16G内存

mysql服务性能优化—https://www.doczj.com/doc/201994323.html,f配置说明详解 (16G内存) MYSQL服务器https://www.doczj.com/doc/201994323.html,f配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data open_files_limit = 10240 back_log = 600 #在MYSQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中。如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。默认值50。 max_connections = 3000 #MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值。 max_connect_errors = 6000 #设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host 的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息。 table_cache = 614 #指示表调整缓冲区大小。# table_cache 参数设置表高速缓存的数目。每个连接进来,都会至少打开一个表缓存。#因此, table_cache 的大小应与 max_connections 的设置有关。例如,对于 200 个#并行运行的连接,应该让表的缓存至少有 200 × N ,这里 N 是应用可以执行的查询#的一个联接中表的最大数量。此外,还需要为临时表和文件保留一些额外的文件描述符。 # 当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;如果#还

python GUI开发工具介绍

python GUI开发工具介绍 Python最大的特点就在于她的快速开发功能。作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域。这里简单介绍用python进行gui开发的一些选择。 https://www.doczj.com/doc/201994323.html,inter Tkinter 似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui 库,也是opensource的产物。Tkinter可用于windows/linux/unix/macintosh操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python 做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还是很有用的,而且开发速度也很快。 2.WxPython WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。 3.PyQT Qt同样是一种开源的GUI库,Qt的类库大约在300多个,函数大约在5700多个。Qt同样适合于大型应用,由它自带的qt designer可以让我们轻松来构建界面元素。 4.pyGtk Gtk是linux下Gnome的核心开发库了。功能上面非常齐全。值得说明的是,在windows 平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。 5.Jython 尝试过用python访问java类库吗,那么就用jython吧。jython其实可以认为是另外一个python开发环境,基于java的,但是大多数的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。 6.MFC

MySQL5.1性能优化方案

MySQL5.1性能优化方案 1.平台数据库 1.1.操作系统 Red Hat Enterprise Linux Server release 5.4 (Tikanga) ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped 32位Linux服务器,单独作为MySQL服务器使用。 1.2.M ySQL 系统使用的是MySQL5.1,最新的MySQL5.5较之老版本有了大幅改进。主要体现在以下几个方面: 1)默认存储引擎更改为InnoDB InnoDB作为成熟、高效的事务引擎,目前已经广泛使用,但MySQL5.1之前的版本默认引擎均为MyISAM,此次MySQL5.5终于将默认数据库存储引擎改为InnoDB,并且引进了Innodb plugin 1.0.7。此次更新对数据库的好处是显而易见的:InnoDB的数据恢复时间从过去的一个甚至几个小时,缩短到几分钟(InnoDB plugin 1.0.7,InnoDB plugin 1.1,恢复时采用红-黑树)。InnoDB Plugin 支持数据压缩存储,节约存储,提高内存命中率,并且支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈。 Multi Rollback Segments:原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。 2)多核性能提升

用python进行GUI开发的选择

用python进行GUI开发的选择 Python最大的特点就在于她的快速开发功能。作为一种胶水型语言,python 几乎可以渗透在我们编程过程中的各个领域。这里我简单介绍一下用python进行gui开发的一些选择。 https://www.doczj.com/doc/201994323.html,inter Tkinter似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui库,也是opensource的产物。Tkinter可用于windows/linux/unix/macintosh 操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还是很有用的,而且开发速度也很快。 2.WxPython WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。 3.PyQT Qt同样是一种开源的GUI库,Qt的类库大约在300多个,函数大约在5700多个。Qt同样适合于大型应用,由它自带的qt designer可以让我们轻松来构建界面元素。 4.pyGtk Gtk是linux下Gnome的核心开发库了。功能上面非常齐全。值得说明的是,在windows平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。 5.Jython 尝试过用python访问java类库吗,那么就用jython吧。jython其实可以认为是另外一个python开发环境,基于java的,但是大多数的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。 6.MFC Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。

mysql性能优化-慢查询分析、优化索引和配置

mysql性能优化-慢查询分析、优化索引和配置目录 一、优化概述 二、查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三、配置优化 1) max_connections 2) back_log 3) interactive_timeout 4) key_buffer_size 5) query_cache_size 6) record_buffer_size 7) read_rnd_buffer_size 8) sort_buffer_size 9) join_buffer_size 10) table_cache 11) max_heap_table_size 12) tmp_table_size

13) thread_cache_size 14) thread_concurrency 15) wait_timeout 一、优化概述 MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上,我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态。 除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能,通常有三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。 二、查询与索引优化分析 在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有慢查询日志,EXPLAIN 分析查询,profiling分析以及show命令查询系统状态及系统变量,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。 1 性能瓶颈定位 Show命令 我们可以通过show命令查看MySQL状态及变量,找到系统的瓶颈: Mysql> show status ——显示状态信息(扩展show status like ‘XXX’) Mysql> show variables ——显示系统变量(扩展show variables like ‘XXX’) Mysql> show innodb status ——显示InnoDB存储引擎的状态 Mysql> show processlist ——查看当前SQL执行,包括执行状态、是否锁表等

MySQL大数据量的查询提高性能优化

最近一段时间参与的项目要操作百万级数据量的数据,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。之前数据量小的时候,查询语句的好坏不会对执行时间有什么明显的影响,所以忽略了许多细节性的问题。 经测试对一个包含400多万条记录的表执行一条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是结合网上流传比较广泛的几个查询语句优化方法: 基本原则:数据量大的时候,应尽量避免全表扫描,应考虑在where 及order by 涉及的列上建立索引,建索引可以大大加快数据的检索速度。但是,有些情况索引是不会起效的,因此,需要下面的做法进行优化: 1、应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2、应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3、尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 4、下面的查询也将导致全表扫描:

wxpython中文手册

wxpython中文手册 wxPython中文教程简单入门加实例 Python 2 / Wxpython wxPythonPython 编程浏览器脚本 wx.Window 是一个基类,许多构件从它继承。包括wx.Frame 构件。技术上这意味着,我们可以在所有的子类中使用wx.Window 的方法。我们这里介绍它的几种方法: * SetTitle( string title ) ——设置窗口标题。只可用于框架和对话框。 * SetToolTip( wx.ToolTip tip ) ——为窗口添加提示。 * SetSize( wx.Size size ) ——设置窗口的尺寸。 * SetPosition( wx.Point pos ) ——设置窗口出现的位置。 * Show( show = True ) ——显示或隐藏窗口。其中的参数可以为True 或False。 * Move( wx.Point pos ) ——将窗口移动到指定位置。 * SetCursor( wx.StockCursor id ) ——设置窗口的鼠标指针样式。Python 代码 1. import wx 2. app = wx.PySimpleApp() 3. frame = wx.Frame( None, -1, '' ) 4. frame.SetToolTip( wx.ToolTip( 'This is a frame' ) )

5. frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) ) 6. frame.SetPosition( wx.Point( 0, 0 ) ) 7. frame.SetSize( wx.Size( 300, 250 ) ) 8. frame.SetTitle( 'simple2.py' ) 9. frame.Show() 10.app.MainLoop() wx.CURSOR_ARROW wx.CURSOR_RIGHT_ARROW wx.CURSOR_BLANK wx.CURSOR_BULLSEYE wx.CURSOR_CHAR wx.CURSOR_CROSS wx.CURSOR_HAND wx.CURSOR_IBEAM wx.CURSOR_LEFT_BUTTON wx.CURSOR_MAGNIFIER wx.CURSOR_MIDDLE_BUTTON wx.CURSOR_NO_ENTRY wx.CURSOR_PAINT_BRUSH wx.CURSOR_PENCIL wx.CURSOR_POINT_LEFT wx.CURSOR_POINT_RIGHT

千万级的mysql数据库与优化方法

千万级的mysql数据库与优化方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。 2.应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: Sql代码 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: Sql代码 3.应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:Sql代码 可以这样查询: Sql代码 5.in 和not in 也要慎用,否则会导致全表扫描,如: 对于连续的数值,能用between 就不要用in 了: 6.下面的查询也将导致全表扫描: Sql代码

若要提高效率,可以考虑全文检索。 7.如果在where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: Sql代码 可以改为强制查询使用索引: 8.应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: 应改为: 9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:Sql代码 应改为: 10.不要在where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。 12.不要写一些没有意义的查询,如需要生成一个空表结构:

Python期末试题题库

D 下面描述错误的是? A. 若a=True,b=False则a or b为True B. 若a=True,b=False则a and b为False C. 若a=True,b=False则not a为False D. a && b为False D 下面描述错误的是? A. 在python中逻辑与运算符不能写作&&,要写作and B. &是两个数字按二进制位作与运算的操作符 C. 3 & 2的结果为2 D. 3 & 3的结果为0 C 下列表达式的值为True的是? A True>2 B 3>2>2 C ('3','2')<('33','22') D 'abc'>'xyz' C 9.6E-5表示以下哪个数字? A. 9.6 B. 0.96 C. 0.000096 D. 96 C 下面哪一个是以添加(追加)模式打开文件做写入操作? A: f.open("f","r") B: f.open("f","w") C: f.open("f","a") D: f.open("f","w+") C 下列不属于浮点数类型的是? A. 36.0 B. 96e4 C. -77 D. 9.6E-5 D Python的序列类型不包括下列哪一种?

- A 字符串 B 列表 C 元组 D 字典 A 以下程序输出什么? """ x=1 """ while x: print(x) A. 运行结果显示NameError: name 'x' is not defined B. 运行结果无限循环输出1 C. 它等价于下面的程序 #x=1 while x: print(x) D. 它等价于下面的程序 while x: print(x) B python单行注释和多行注释分别是什么? A. """ """和''' ''' B. #和""" """ C. //和''' ''' D. #和// C 表达式3**2的值为 A. 6 B. 18 C. 9 D. 12 B 以下可以终结一个循环的保留字是 A. if B. break C. exit D. continue A

Mysql千万级别数据优化方案总结

Mysql千万级别数据优化方案 目录 目录 (1) 一、目的与意义 (2) 1)说明 (2) 二、解决思路与根据(本测试表中数据在千万级别) (2) 1)建立索引 (2) 2)数据体现(主键非索引,实际测试结果其中fid建立索引) (2) 3)MySQL分页原理 (2) 4)经过实际测试当对表所有列查询时 (2) 三、总结 (3) 1)获得分页数据 (3) 2)获得总页数:创建表记录大数据表中总数通过触发器来维护 (3)

一、目的与意义 1)说明 在MySql单表中数据达到千万级别时数据的分页查询结果时间过长,对此进行优达 到最优效果,也就是时间最短;(此统计利用的jdbc连接,其中fid为该表的主键;) 二、解决思路与根据(本测试表中数据在千万级别) 1)建立索引 优点:当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜 索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记 录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是 在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索 引中的ROWID(相当于页码)快速找到表中对应的记录。 缺点:当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降 低了数据的维护速度。 2)数据体现(主键非索引,实际测试结果其中fid建立索引) 未创建索引:SELECT fid from t_history_data LIMIT 8000000,10结果:13.396s 创建索引:SELECT fid from t_history_data LIMIT 8000000,10结果:2.896s select*fromt_history_datawherefidin (任意十条数据的id )结果:0.141s 首先通过分页得到分页的数据的ID,将ID拼接成字符串利用SQL语句 select * from table where ID in (ID字符串)此语句受数据量大小的影响比较小 (如上测试); 3)MySQL分页原理 MySQL的limit工作原理就是先读取n条记录,然后抛弃前n条,读m条想要 的,所以n越大,性能会越差。 优化前SQL: SELECT * FROM v_history_data LIMIT 5000000, 1010.961s 优化后SQL: SELECT * FROM v_history_data INNER JOIN (SELECT fid FROM t_history_data LIMIT 5000000, 10) a USING (fid)1.943s 分别在于,优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后 抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了, 然后通过member_id读取需要的列 4)经过实际测试当对表所有列查询时 select * from table 会比select (所有列名)from table 快些(以查询8000000

使用 PYTHON 开发 WINDOWS桌面程序

使用python 开发windows 应用程序12312412512312 本人以前一直用的是C++,MFC,毕业到了公司以后,公司用python做流程,我 顺便最近研究了一下用python开发windows 应用程序的整个流程,大体如下: 一、开发前期准备 1.boa-constructor-0.6.1.bin.setup.exe #一个wxWidges 的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, #它不与集成开发环境的MainLoop冲突,用pythonwin,pyScripter都会冲突,典型 报错就是运行第二次 #程序的时候,直接导致 集成开发环境的强制退出,因为MainLoop冲突了 2.wxPython2.8-win32-unicode-2.8.10.1-py26.exe #wxPython库,提供了用C++写的 windows 组件库wx 3.py2exe-0.6.9.win32-py2.6.exe #打包发布工具,将python写的windows 程序或控 制台程序直接打包成exe 可执行文件,供用户使用 上述三个软件都是基于python2.6的,软件版本一定要配套,因为他们默认的安装路径和python版本有关系,否则会找不到相关库的存在。 二、开发 软件安装完以后,打开BOA,哇塞,拖控件真简单,而且属性啥的和Dephi差 不多,你只要改改属性,代码会自动生成,它生成的控件很漂亮,记得以前用C++6.0开发软件的时候,那个控件真丑,都需要我重新用控件库去绑定优化, 现在不用了~BOA生成的控件,视觉效果相当好~开发软件速度相当快,再也 不用为了软件界面而写太多代码,也不用为了生成一个小程序而生成了很多的 文件,python开发的程序,没有多余的文件,而且文件很小。 三、发布 很多人都想在自己的软件程序写好以后,发布给其他人使用,一方面不希望自 己的代码泄露,一方面以此显出一点成就感,呵呵,可以使用py2exe将你的windows 程序打包发布了!当然,首先你得写个如下的setup.py文件: 代码 1 from distutils.core import setup 2 import py2exe 3 includes = ["encodings", "encodings.*"] 4 options = {"py2exe": 5 { "compressed": 1, 6 "optimize": 2, 7 "includes": includes, 8 "bundle_files": 1 9 } 10 } 11 setup( 12 version = "0.1.0",

Mysql性能优化

MySQL性能优化 性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有: 优化查询 优化数据库结构 优化MySQL服务器 数据库管理人员可以使用SHOW STATUS语句来查询MySQL数据库的性能。语法:SHOW STATUE LIKE ‘value’;其中value参数是常用的几个统计参数。 Connections:连接MySQL服务器的次数 Uptime:MySQL服务器的上线时间; Slow_queries:慢查询的次数; Com_select:查询操做的次数; Com_insert:插入操作的次数; Com_delete:删除操作的次数; Com_update:更新操作的次数; 1优化查询 查询操作是最频繁的操作,提高了查询速度可以有效提高MySQL 数据库的性能。 首先要对查询语句进行分析,分析查询语句的命令是EXPLAIN语句和DESCRIBE语句。比如 EXPLAIN SELECT * FROM student \G; 索引可以快速定位表中的某条记录。使用索引也可以提高数据库查

询的速度,从而提高数据库的性能。如果不使用索引,查询语句将 表中的所有字段。这样查询的速度会很慢。如果使用了索引,查询语句只会查询索引字段。这样就减少查询的记录数,达到提高查询效率的目的。 现在看一个查询语句中没有索引的使用情况: SELECT * FROM student WHERE name = ‘张三’;这样会对student表中的所有数据都查询一下,对比一下name的字段是否是张三。 然后我们在name字段上建立一个名为index_name的索引:CREATE INDEX index_name ON student(name); 现在name字段上面已经有索引了,再进行该select语句查询的速度就非常快了,不需要遍历整个表。 但是有些时候即使查询时使用的是索引,但索引并没有起作用。比如使用了LIKE关键字进行查询时,如果匹配字符串的第一个字符 为‘%’,索引不会被使用。如果‘%’不是在第一个位置,索引就会被使用。 另一种情况是在表的多个字段上创建一个索引,比如 CREATE INDEX index ON student(birth,department);这样只有查询语句条件中使用字段name时,索引才会被用到。因为name字段是多列索引的第一个字段,只有查询条件中使用了name字段才会使索引index起作用。 2优化子查询 很多查询中需要使用子查询。子查询可以使查询语句很灵活,但子查询的执行效率不高。MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句在临时表中查询记录。查询完毕后,MySQL需要插销这些临时表。所以在MySQL中可以使用连接查询来代替子查询。连接查询不需要建立临时表,其速度比子查询要快。

WXPYTHON中文教程 简单入门加实例

wxPython中文教程简单入门加实例 博客分类: Python2/Wxpython wxPythonPython编程浏览器脚本 wx.Window是一个基类,许多构件从它继承。包括wx.Frame构件。技术上这意味着,我们可以在所有的 子类中使用wx.Window的方法。我们这里介绍它的几种方法: *SetTitle(string title)——设置窗口标题。只可用于框架和对话框。*SetToolTip(wx.ToolTip tip)——为窗口添加提示。 *SetSize(wx.Size size)——设置窗口的尺寸。 *SetPosition(wx.Point pos)——设置窗口出现的位置。 *Show(show=True)——显示或隐藏窗口。其中的参数可以为True或False。 *Move(wx.Point pos)——将窗口移动到指定位置。 *SetCursor(wx.StockCursor id)——设置窗口的鼠标指针样式。 Python代码 1.import wx 2.app=wx.PySimpleApp() 3.frame=wx.Frame(None,-1,'') 4.frame.SetToolTip(wx.ToolTip('This is a frame')) 5.frame.SetCursor(wx.StockCursor(wx.CURSOR_MAGNIFIER)) 6.frame.SetPosition(wx.Point(0,0)) 7.frame.SetSize(wx.Size(300,250)) 8.frame.SetTitle('simple2.py') 9.frame.Show() 10.app.MainLoop() 我们创建了一个"This is a frame"提示。鼠标指针被设置为放大镜样式。可用的鼠标指针样式有:

优化MySQL数据库性能的几个好方法

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

【黑马程序员】MySQL的性能调优一

【黑马程序员】MySQL的性能调优一 什么是MySQL,怎么安装,怎么使用,我这里不做说明了。 一、MySQL 与其他数据库的简单比较 1.1性能比较 性能方面,一直是MySQL 引以为自豪的一个特点。在权威的第三方评测机构多次测试较量各种数据库TPCC 值的过程中,MySQL 一直都有非常优异的表现,而且在其他所有商用的通用数据库管理系统中,仅仅只有Oracle 数据库能够与其一较高下。至于各种数据库详细的性能数据,我这里就不便记录,大家完全可以通过网上第三方评测机构公布的数据了解具体细节信息。 MySQL 一直以来奉行一个原则,那就是在保证足够的稳定性的前提下,尽可能的提高自身的处理能力。也就是说,在性能和功能方面,MySQL 第一考虑的要素主要还是性能,MySQL希望自己是一个在满足客户99%的功能需求的前提下,花掉剩下的大部分精力来性能努力,而不是希望自己是成为一个比其他任何数据库的功能都要强大的数据库产品。 1.2可靠性 关于可靠性的比较,并没有太多详细的评测比较数据,但是从目前业界的交流中可以了解到,几大商业厂商的数据库的可靠性肯定是没有太多值得怀疑的。但是做为开源数据库管理系统的代表,MySQL 也有非常优异的表现,而并不是像有些人心中所怀疑的那样,因为不是商业厂商所提供,就会不够稳定不够健壮。从当前最火的Facebook 这样大型的网站都是使用MySQL 数据库,就可以看出,MySQL 在稳定可靠性方面,并不会

比我们的商业厂商的产品有太多逊色。而且排在全球前10 位的大型网站里面,大部分都有部分业务是运行在MySQL数据库环境上,如Yahoo,Google 等。 总的来说,MySQL 数据库在发展过程中一直有自己的三个原则:简单、高效、可靠。从上面的简单比较中,我们也可以看出,在MySQL 自己的所有三个原则上面,没有哪一项是做得不好的。而且,虽然功能并不是MySQL 自身所追求的三个原则之一,但是考虑到当前用户量的急剧增长,用户需求越来越越多样化,MySQL 也不得不在功能方面做出大量的努力,来不断满足客户的新需求。比如最近版本中出现的Eent Scheduler (类似于Oracle 的Job 功能),Partition 功能,自主研发的Maria 存储引擎在功能方面的扩展,Falcon 存储引擎对事务的支持等等,都证明了MySQL 在功能方面也开始了不懈的努力。 任何一种产品,都不可能是完美的,也不可能适用于所有用户。我们只有衡量了每一种产品的各种特性之后,从中选择出一种最适合于自身的产品。 二、MySQL 的主要适用场景 据说目前MySQL 用户已经达千万级别了,其中不乏企业级用户。可以说是目前最为流行的开源数据库管理系统软件了。任何产品都不可能是万能的,也不可能适用于所有的应用场景。 那么MySQL 到底在什么场景下适用什么场景下不适用呢? 1、Web 网站系统 Web 站点,是MySQL 最大的客户群,也是MySQL 发展史上最为重要的支撑力量,这一点在最开始的MySQL Server 简介部分就已经说明过。 MySQL 之所以能成为Web 站点开发者们最青睐的数据库管理系统,是因为

相关主题
文本预览
相关文档 最新文档