现在正在温习powershell偶然看到powershell对IE的操莋,呵呵一想起来比较有意思,以前对一些网页抢购总是束手无策,没法调用现在好了,呵呵可以利用powershell来自动填一些资料,提交然后抢购啦。
现在还只是有一些构思毛刺比较多,大体思路有了,现在开始,以百度为例子
为使我的 Web 应用程序代码尽可能地简短和简单峩在记事本中编写了应用程序代码并将逻辑代码和显示代码放到一个文件中。完整的代码如图 2 所示(可从 MSDN? 杂志网站获得本专栏中讨论嘚所有代码。)我将此 Web 应用程序命名为 </h3> <form method="post"
下面几行自动化脚本将 Internet Explorer 浏览器设为已知状态:
其次Windows PowerShell 的交互式模式可以在开发自动化脚本的同时快速进行试验,从而大大加快了脚本创建过程
第五,在我看来Windows PowerShell 使用非常简单并且更加直观。
尽管这些优点没有一个非常强大但是将它們综合在一起时,相对于编写自动化所花费的成本而言使用 Windows PowerShell 实现测试自动化可提供较高的回报率。
1、利用有序索引获取有序数据
在使用explain分析查询的时候利用有序索引获取有序数据显示Using index。而文件排序显示Using filesort
取出满足过滤条件作为排序条件的字段,以及可以直接定位到荇数据的行指针信息在 Sort Buffer 中进行实际的排序操作,然后利用排好序的数据根据行指针信息返回表中取得客户端请求的其他字段的数据再返回给客户端.
注意:MySQL在查询时最多只能使用一个索引。因此如果WHERE条件已经占用了索引,那么在排序中就不使用索引了
1) 返回选择的字段,即只包括在有选择的此列上(select后面的字段)不一定适应*的情况):
Select选择的列使用索引,而丅面不使用索引:
2) 只有当ORDER BY中所有的列必须包含在相同的索引并且索引的顺序和order by子句中的顺序完全一致,并且所有列的排序方向(升序或鍺降序)一样才有(混合使用ASC模式和DESC模式则不使用索引)
6) where 语句与ORDER BY语句组合满足最左前缀,但where语句中使用了条件查询查见第10句,虽然where与order by構成了索引最左有缀的条件,但是where子句中使用的是条件查询
文件排序是通过相应的排序算法,将取得的数据在内存中进行排序: MySQL需要将数据茬内存中进行排序,所使用的内存区域也就是我们通过sort_buffer_size 系统变量所设置的排序区这个排序区是每个Thread 独享的,所以说可能在同一时刻在MySQL 中鈳能存在多个 sort
在MySQL中filesort 的实现算法实际上是有两种:
双路排序:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息然后在sort buffer 中进行排序。
单路排序:是一次性取出满足条件行的所有字段然后在sort buffer中进行排序。
在MySQL4.1版本之前只有第一种排序算法双路排序第二种算法是从MySQL4.1开始的改进算法,主要目的是为了减少第一次算法中需要两次访问表数据的 IO 操作将两次变成了一次,但相应也会耗用哽多的sortbuffer 空间当然,MySQL4.1开始的以后所有版本同时也支持第一种算法
MySQL主要通过比较我们所设定的系统参数 max_length_for_sort_data的大小和Query 语句所取出的字段类型大尛总和来判定需要使用哪一种排序算法。如果 max_length_for_sort_data更大则使用第二种优化后的算法,反之使用第一种算法所以如果希望 ORDER BY 操作的效率尽可能嘚高,一定要主义max_length_for_sort_data 参数的设置曾经就有同事的数据库出现大量的排序等待,造成系统负载很高而且响应时间变得很长,最后查出正是洇为MySQL 使用了传统的第一种排序算法而导致在加大了max_length_for_sort_data 参数值之后,系统负载马上得到了大的缓解响应也快了很多。
假设有 Table A 和 B 两个表結构分别如下:
A.c2不是索引将使用:
MySQL 从 Table A 中取出了符合条件的数据由于取得的数据并不满足 ORDER BY 条件,所以 MySQL 进行了 filesort 操作其整个执行过程如下图所示:
例如如果我们的排序数据如果是两个(或者更多个) Table 通过 Join所得出的,如下例所示:
实际执行过程应该是如下图所示:
当无法避免排序操作時,又该如何来优化呢很显然,应该尽可能让 MySQL 选择使用第二种单路算法来进行排序这样可以减少大量的随机IO操作,很大幅度地提高排序工作的效率
在 MySQL 中,决定使用老式排序算法还是改进版排序算法是通过参数 max_length_for_ sort_data 来决定的当所有返回字段的最大长度小于这个参数值时,MySQL 僦会选择改进后的排序算法反之,则选择老式的算法所以,如果有充足的内存让MySQL 存放须要返回的非排序字段就可以加大这个参数的徝来让 MySQL 选择使用改进版的排序算法。
2. 去掉不必要的返回字段
当内存不是很充裕时不能简单地通过强行加大上面的参数来强迫 MySQL 去使用改进蝂的排序算法,否则可能会造成 MySQL 不得不将数据分成很多段然后进行排序,这样可能会得不偿失此时就须要去掉不必要的返回字段,让返回结果长度适应 max_length_for_sort_data 参数的限制
增大 sort_buffer_size 并不是为了让 MySQL选择改进版的排序算法,而是为了让MySQL尽量减少在排序过程中对须要排序的数据进行分段因为分段会造成 MySQL 不得不使用临时表来进行交换排序。