superwei

导航

<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

2006年2月22日 #

希腊字母读法

posted @ 2021-06-19 11:43 小辞猬 阅读(76) | 评论 (0)编辑 收藏

【Mysql】关于索引

DB引擎:InnoDB
两表A,B表均为6W+的记录。用B表的信息更新A表。
SQL:update A left join B on A.field1 = B.field1 and A.field2 = B.field2
         set A.field3 = B.field3, A.field4 = B.field4
无引擎时:每1000更新需要2分11秒,全部更新大概需要2~3小时。

此时加入索引:
CREATE INDEX field1_Index ON `A`(`field1`);
注:1、此处只加field1是因为 field2的内容变化很小,就那几个值。
      2、此SQL里的字段都不是主键

再次执行SQL,效率依旧。似乎索引没有作用。为了验证我的想法,查看了执行方式:
explain update A left join B on A.field1 = B.field1 and A.field2 = B.field2
         set A.field3 = B.field3, A.field4 = B.field4 
果然在执行时,没用到索引。找到症结,那就继续找为什么索引没有被用的原因。
查找过程省略,直接上结果。
因为是update,所以我认为 左联和直联,对于结果没有区别,但是从左联改为直联后,
再查询执行方式,发现就能使用索引(原因暂不知道,以后知道了再写)
于是再次执行如下SQL:
update A inner join B on A.field1 = B.field1 and A.field2 = B.field2
         set A.field3 = B.field3, A.field4 = B.field4 
6W+的数据执行时间:1.43秒
优化完毕。
另,因为以上字段都非主键,所以 SQL修改成以下方式执行似乎更快,查询执行方式,用到了主键索引和我自己加的索引
update A left join B on A.field1 = B.field1 and A.field2 = B.field2
         set A.field3 = B.field3, A.field4 = B.field4
where A.key in (select key from A)

附:
删除索引:drop INDEX field1_Index ON `A`;
查看索引:show index from A
查看线程:select * from information_schema.processlist t
              show processlist
杀线程: kill processId


posted @ 2018-10-25 09:49 小辞猬 阅读(162) | 评论 (0)编辑 收藏

跳槽 程序员需要注意的十大要点

     摘要: 摘于它处,非我本文  阅读全文

posted @ 2007-01-31 21:09 小辞猬 阅读(411) | 评论 (0)编辑 收藏

哈哈,新项目开始了

COBOL的项目就要结束了,下个项目就是.NET.说实在话,我是比较期待,但是如果是C#,我就更加的HAPPY,偏偏要是VB.NET,看了半天,发现怎么就那么的奇怪呢!就感觉看一段没有断句的文言文!还好,现在装了个中文的MSDN,比以前看日文的MSDN要舒服多了,MD,看起来真费劲!

今天看VB.NET的代码,突然有种感觉,就像刚到深圳去实习,看人家以前做的项目的代码一样,好费劲,很多的关键字,咋一看还不知道,稍一迷糊就看到后面,突然发现前面的几句代码是啥意思啊!不知道做的时候又是什么样一种感觉,总的来说就是奇怪!ff

posted @ 2006-02-22 17:20 小辞猬 阅读(343) | 评论 (0)编辑 收藏