0

以下查询在我杀死它之前 24 小时运行。它产生了一个与数据库本身一样大的日志文件(25GB 日志文件,27GB 数据库文件),并且在杀死后需要几个小时才能恢复:

ALTER TABLE core ADD COLUMN pointcount;
UPDATE core SET pointcount = (SELECT pointcount FROM pointcountsByZip WHERE zip = core.zip);

数据库

  • core大约是 1300 万行。
  • pointcountsByZip大约有一千行。

有可能的使用

  • 单用户数据分析
  • 我总是需要拉出完全合并的表单(例如,我需要一个版本,core其中 pointcount 列对 中的每个 id 一遍又一遍地重复core
  • 相当罕见的更新(但他们不能每列花费一天!)

关于更新

  • 通过这样做,我意识到我正在对数据库进行非规范化。

我看到优化的可能性

  1. 保持数据库规范化,然后每次阅读时都进行左外连接。
  2. 如上所述在一项大操作中对数据库进行非规范化
  3. 通过 ZIP 或诸如此类的方式将非规范化(有趣的是,这与“士气低落”有多接近)更新为块。

我正在寻找SELECT * FROM core尽可能快的速度,但UPDATE不会花费数天时间。如果还给了我一些关于它的状态的指示,那就太好UPDATE了(例如,如果我在数据库的 1/100 上运行 100 次更新,例如,我会知道它大约走了多远,并且能够在没有的情况下中止丢失所有更改)。磁盘空间并不是一个真正的考虑因素,尽管它总是很好。

** 编辑:执行计划**

sqlite> EXPLAIN UPDATE core SET zip_pointcountUC = (SELECT zip_pointcountUC FROM clinicCountsByzip WHERE zip = core.zip);
0|Trace|0|0|0||00|
1|Goto|0|536|0||00|
2|Null|0|1|2||00|
3|OpenRead|0|255|0|494|00|
4|Rewind|0|8|0||00|
5|Rowid|0|2|0||00|
6|RowSetAdd|1|2|0||00|
7|Next|0|5|0||01|
8|Close|0|0|0||00|
9|OpenWrite|0|255|0|494|00|
10|RowSetRead|1|534|2||00|
11|NotExists|0|10|2||00|
12|Null|0|3|496||00|
13|Column|0|0|3||00|
14|Column|0|1|4||00|
15|Column|0|2|5||00|
16|Column|0|3|6||00|
17|Column|0|4|7||00|
18|Column|0|5|8||00|
19|Column|0|6|9||00|
20|Column|0|7|10||00|
21|Column|0|8|11||00|
22|Column|0|9|12||00|
23|Column|0|10|13||00|
24|Column|0|11|14||00|
25|Column|0|12|15||00|
26|Column|0|13|16||00|
27|Column|0|14|17||00|
28|Column|0|15|18||00|
29|Column|0|16|19||00|
30|Column|0|17|20||00|
31|Column|0|18|21||00|
32|Column|0|19|22||00|
33|Column|0|20|23||00|
34|Column|0|21|24||00|
35|Column|0|22|25||00|
36|Column|0|23|26||00|
37|Column|0|24|27||00|
38|Column|0|25|28||00|
39|Column|0|26|29||00|
40|Column|0|27|30||00|
41|Column|0|28|31||00|
42|Column|0|29|32||00|
43|Column|0|30|33||00|
44|Column|0|31|34||00|
45|Column|0|32|35||00|
46|Column|0|33|36||00|
47|Column|0|34|37||00|
48|Column|0|35|38||00|
49|Column|0|36|39||00|
50|Column|0|37|40||00|
51|Column|0|38|41||00|
52|Column|0|39|42||00|
53|Column|0|40|43||00|
54|Column|0|41|44||00|
55|Column|0|42|45||00|
56|Column|0|43|46||00|
57|Column|0|44|47||00|
58|Column|0|45|48||00|
59|Column|0|46|49||00|
60|Column|0|47|50||00|
61|Column|0|48|51||00|
62|Column|0|49|52||00|
63|Column|0|50|53||00|
64|Column|0|51|54||00|
65|Column|0|52|55||00|
66|Column|0|53|56||00|
67|Column|0|54|57||00|
68|Column|0|55|58||00|
69|Column|0|56|59||00|
70|Column|0|57|60||00|
71|Column|0|58|61||00|
72|Column|0|59|62||00|
73|Column|0|60|63||00|
74|Column|0|61|64||00|
75|Column|0|62|65||00|
76|Column|0|63|66||00|
77|Column|0|64|67||00|
78|Column|0|65|68||00|
79|Column|0|66|69||00|
80|Column|0|67|70||00|
81|Column|0|68|71||00|
82|Column|0|69|72||00|
83|Column|0|70|73||00|
84|Column|0|71|74||00|
85|Column|0|72|75||00|
86|Column|0|73|76||00|
87|Column|0|74|77||00|
88|Column|0|75|78||00|
89|Column|0|76|79||00|
90|Column|0|77|80||00|
91|Column|0|78|81||00|
92|Column|0|79|82||00|
93|Column|0|80|83||00|
94|Column|0|81|84||00|
95|Column|0|82|85||00|
96|Column|0|83|86||00|
97|Column|0|84|87||00|
98|Column|0|85|88||00|
99|Column|0|86|89||00|
100|Column|0|87|90||00|
101|Column|0|88|91||00|
102|Column|0|89|92||00|
103|Column|0|90|93||00|
104|Column|0|91|94||00|
105|Column|0|92|95||00|
106|Column|0|93|96||00|
107|Column|0|94|97||00|
108|Column|0|95|98||00|
109|Column|0|96|99||00|
110|Column|0|97|100||00|
111|Column|0|98|101||00|
112|Column|0|99|102||00|
113|Column|0|100|103||00|
114|Column|0|101|104||00|
115|Column|0|102|105||00|
116|Column|0|103|106||00|
117|Column|0|104|107||00|
118|Column|0|105|108||00|
119|Column|0|106|109||00|
120|Column|0|107|110||00|
121|Column|0|108|111||00|
122|Column|0|109|112||00|
123|Column|0|110|113||00|
124|Column|0|111|114||00|
125|Column|0|112|115||00|
126|Column|0|113|116||00|
127|Column|0|114|117||00|
128|Column|0|115|118||00|
129|Column|0|116|119||00|
130|Column|0|117|120||00|
131|Column|0|118|121||00|
132|Column|0|119|122||00|
133|Column|0|120|123||00|
134|Column|0|121|124||00|
135|Column|0|122|125||00|
136|Column|0|123|126||00|
137|Column|0|124|127||00|
138|Column|0|125|128||00|
139|Column|0|126|129||00|
140|Column|0|127|130||00|
141|Column|0|128|131||00|
142|Column|0|129|132||00|
143|Column|0|130|133||00|
144|Column|0|131|134||00|
145|Column|0|132|135||00|
146|Column|0|133|136||00|
147|Column|0|134|137||00|
148|Column|0|135|138||00|
149|Column|0|136|139||00|
150|Column|0|137|140||00|
151|Column|0|138|141||00|
152|RealAffinity|141|0|0||00|
153|Column|0|139|142||00|
154|Column|0|140|143||00|
155|Column|0|141|144||00|
156|Column|0|142|145||00|
157|Column|0|143|146||00|
158|Column|0|144|147||00|
159|Column|0|145|148||00|
160|Column|0|146|149||00|
161|Column|0|147|150||00|
162|Column|0|148|151||00|
163|Column|0|149|152||00|
164|Column|0|150|153||00|
165|Column|0|151|154||00|
166|Column|0|152|155||00|
167|Column|0|153|156||00|
168|Column|0|154|157||00|
169|Column|0|155|158||00|
170|Column|0|156|159||00|
171|Column|0|157|160||00|
172|Column|0|158|161||00|
173|Column|0|159|162||00|
174|Column|0|160|163||00|
175|Column|0|161|164||00|
176|Column|0|162|165||00|
177|Column|0|163|166||00|
178|Column|0|164|167||00|
179|Column|0|165|168||00|
180|Column|0|166|169||00|
181|Column|0|167|170||00|
182|Column|0|168|171||00|
183|Column|0|169|172||00|
184|Column|0|170|173||00|
185|Column|0|171|174||00|
186|Column|0|172|175||00|
187|Column|0|173|176||00|
188|Column|0|174|177||00|
189|Column|0|175|178||00|
190|Column|0|176|179||00|
191|Column|0|177|180||00|
192|Column|0|178|181||00|
193|Column|0|179|182||00|
194|Column|0|180|183||00|
195|Column|0|181|184||00|
196|Column|0|182|185||00|
197|Column|0|183|186||00|
198|Column|0|184|187||00|
199|Column|0|185|188||00|
200|Column|0|186|189||00|
201|Column|0|187|190||00|
202|Column|0|188|191||00|
203|Column|0|189|192||00|
204|Column|0|190|193||00|
205|Column|0|191|194||00|
206|Column|0|192|195||00|
207|Column|0|193|196||00|
208|Column|0|194|197||00|
209|Column|0|195|198||00|
210|Column|0|196|199||00|
211|Column|0|197|200||00|
212|Column|0|198|201||00|
213|Column|0|199|202||00|
214|Column|0|200|203||00|
215|Column|0|201|204||00|
216|Column|0|202|205||00|
217|Column|0|203|206||00|
218|Column|0|204|207||00|
219|Column|0|205|208||00|
220|Column|0|206|209||00|
221|Column|0|207|210||00|
222|Column|0|208|211||00|
223|Column|0|209|212||00|
224|Column|0|210|213||00|
225|Column|0|211|214||00|
226|Column|0|212|215||00|
227|Column|0|213|216||00|
228|Column|0|214|217||00|
229|Column|0|215|218||00|
230|Column|0|216|219||00|
231|Column|0|217|220||00|
232|Column|0|218|221||00|
233|Column|0|219|222||00|
234|Column|0|220|223||00|
235|Column|0|221|224||00|
236|Column|0|222|225||00|
237|Column|0|223|226||00|
238|Column|0|224|227||00|
239|Column|0|225|228||00|
240|Column|0|226|229||00|
241|Column|0|227|230||00|
242|Column|0|228|231||00|
243|Column|0|229|232||00|
244|Column|0|230|233||00|
245|Column|0|231|234||00|
246|Column|0|232|235||00|
247|Column|0|233|236||00|
248|Column|0|234|237||00|
249|Column|0|235|238||00|
250|Column|0|236|239||00|
251|Column|0|237|240||00|
252|Column|0|238|241||00|
253|Column|0|239|242||00|
254|Column|0|240|243||00|
255|Column|0|241|244||00|
256|Column|0|242|245||00|
257|Column|0|243|246||00|
258|Column|0|244|247||00|
259|Column|0|245|248||00|
260|Column|0|246|249||00|
261|Column|0|247|250||00|
262|Column|0|248|251||00|
263|Column|0|249|252||00|
264|Column|0|250|253||00|
265|Column|0|251|254||00|
266|Column|0|252|255||00|
267|Column|0|253|256||00|
268|Column|0|254|257||00|
269|Column|0|255|258||00|
270|Column|0|256|259||00|
271|Column|0|257|260||00|
272|Column|0|258|261||00|
273|Column|0|259|262||00|
274|Column|0|260|263||00|
275|Column|0|261|264||00|
276|Column|0|262|265||00|
277|Column|0|263|266||00|
278|Column|0|264|267||00|
279|Column|0|265|268||00|
280|Column|0|266|269||00|
281|Column|0|267|270||00|
282|Column|0|268|271||00|
283|Column|0|269|272||00|
284|Column|0|270|273||00|
285|Column|0|271|274||00|
286|Column|0|272|275||00|
287|Column|0|273|276||00|
288|Column|0|274|277||00|
289|RealAffinity|277|0|0||00|
290|Column|0|275|278||00|
291|Column|0|276|279||00|
292|Column|0|277|280||00|
293|Column|0|278|281||00|
294|Column|0|279|282||00|
295|Column|0|280|283||00|
296|Column|0|281|284||00|
297|Column|0|282|285||00|
298|Column|0|283|286||00|
299|Column|0|284|287||00|
300|Column|0|285|288||00|
301|Column|0|286|289||00|
302|Column|0|287|290||00|
303|Column|0|288|291||00|
304|Column|0|289|292||00|
305|Column|0|290|293||00|
306|Column|0|291|294||00|
307|Column|0|292|295||00|
308|Column|0|293|296||00|
309|Column|0|294|297||00|
310|Column|0|295|298||00|
311|Column|0|296|299||00|
312|Column|0|297|300||00|
313|Column|0|298|301||00|
314|Column|0|299|302||00|
315|Column|0|300|303||00|
316|Column|0|301|304||00|
317|Column|0|302|305||00|
318|Column|0|303|306||00|
319|Column|0|304|307||00|
320|Column|0|305|308||00|
321|Column|0|306|309||00|
322|Column|0|307|310||00|
323|Column|0|308|311||00|
324|Column|0|309|312||00|
325|Column|0|310|313||00|
326|Column|0|311|314||00|
327|Column|0|312|315||00|
328|Column|0|313|316||00|
329|Column|0|314|317||00|
330|Column|0|315|318||00|
331|Column|0|316|319||00|
332|Column|0|317|320||00|
333|Column|0|318|321||00|
334|Column|0|319|322||00|
335|Column|0|320|323||00|
336|Column|0|321|324||00|
337|Column|0|322|325||00|
338|Column|0|323|326||00|
339|Column|0|324|327||00|
340|Column|0|325|328||00|
341|Column|0|326|329||00|
342|Column|0|327|330||00|
343|Column|0|328|331||00|
344|Column|0|329|332||00|
345|Column|0|330|333||00|
346|Column|0|331|334||00|
347|Column|0|332|335||00|
348|Column|0|333|336||00|
349|Column|0|334|337||00|
350|Column|0|335|338||00|
351|Column|0|336|339||00|
352|Column|0|337|340||00|
353|Column|0|338|341||00|
354|Column|0|339|342||00|
355|Column|0|340|343||00|
356|Column|0|341|344||00|
357|Column|0|342|345||00|
358|Column|0|343|346||00|
359|Column|0|344|347||00|
360|Column|0|345|348||00|
361|Column|0|346|349||00|
362|Column|0|347|350||00|
363|RealAffinity|350|0|0||00|
364|Column|0|348|351||00|
365|Column|0|349|352||00|
366|Column|0|350|353||00|
367|Column|0|351|354||00|
368|Column|0|352|355||00|
369|Column|0|353|356||00|
370|Column|0|354|357||00|
371|Column|0|355|358||00|
372|Column|0|356|359||00|
373|Column|0|357|360||00|
374|Column|0|358|361||00|
375|Column|0|359|362||00|
376|Column|0|360|363||00|
377|Column|0|361|364||00|
378|Column|0|362|365||00|
379|Column|0|363|366||00|
380|Column|0|364|367||00|
381|Column|0|365|368||00|
382|Column|0|366|369||00|
383|Column|0|367|370||00|
384|Column|0|368|371||00|
385|Column|0|369|372||00|
386|Column|0|370|373||00|
387|Column|0|371|374||00|
388|Column|0|372|375||00|
389|Column|0|373|376||00|
390|Column|0|374|377||00|
391|Column|0|375|378||00|
392|Column|0|376|379||00|
393|Column|0|377|380||00|
394|Column|0|378|381||00|
395|Column|0|379|382||00|
396|Column|0|380|383||00|
397|Column|0|381|384||00|
398|Column|0|382|385||00|
399|Column|0|383|386||00|
400|Column|0|384|387||00|
401|Column|0|385|388||00|
402|Column|0|386|389||00|
403|Column|0|387|390||00|
404|Column|0|388|391||00|
405|Column|0|389|392||00|
406|Column|0|390|393||00|
407|Column|0|391|394||00|
408|Column|0|392|395||00|
409|Column|0|393|396||00|
410|Column|0|394|397||00|
411|Column|0|395|398||00|
412|RealAffinity|398|0|0||00|
413|Column|0|396|399||00|
414|Column|0|397|400||00|
415|Column|0|398|401||00|
416|Column|0|399|402||00|
417|Column|0|400|403||00|
418|RealAffinity|403|0|0||00|
419|Column|0|401|404||00|
420|RealAffinity|404|0|0||00|
421|Column|0|402|405||00|
422|Column|0|403|406||00|
423|Column|0|404|407||00|
424|RealAffinity|407|0|0||00|
425|Column|0|405|408||00|
426|RealAffinity|408|0|0||00|
427|Column|0|406|409||00|
428|Column|0|407|410||00|
429|RealAffinity|410|0|0||00|
430|Column|0|408|411||00|
431|RealAffinity|411|0|0||00|
432|Column|0|409|412||00|
433|RealAffinity|412|0|0||00|
434|Column|0|410|413|NULL|00|
435|Column|0|411|414|NULL|00|
436|Column|0|412|415|NULL|00|
437|Column|0|413|416|NULL|00|
438|Column|0|414|417|NULL|00|
439|Column|0|415|418|NULL|00|
440|Column|0|416|419|NULL|00|
441|Column|0|417|420|NULL|00|
442|Column|0|418|421|NULL|00|
443|Column|0|419|422|NULL|00|
444|Column|0|420|423|NULL|00|
445|Column|0|421|424|NULL|00|
446|Column|0|422|425|NULL|00|
447|Column|0|423|426|NULL|00|
448|Column|0|424|427|NULL|00|
449|Column|0|425|428|NULL|00|
450|Column|0|426|429|NULL|00|
451|Column|0|427|430|NULL|00|
452|Column|0|428|431|NULL|00|
453|Column|0|429|432|NULL|00|
454|Column|0|430|433|NULL|00|
455|Column|0|431|434|NULL|00|
456|Column|0|432|435|NULL|00|
457|Column|0|433|436|NULL|00|
458|Column|0|434|437|NULL|00|
459|Column|0|435|438|NULL|00|
460|Column|0|436|439|NULL|00|
461|Column|0|437|440|NULL|00|
462|Column|0|438|441|NULL|00|
463|Column|0|439|442|NULL|00|
464|Column|0|440|443|NULL|00|
465|Column|0|441|444|NULL|00|
466|Column|0|442|445|NULL|00|
467|Column|0|443|446|NULL|00|
468|Column|0|444|447|NULL|00|
469|Column|0|445|448|NULL|00|
470|Column|0|446|449|NULL|00|
471|Column|0|447|450|NULL|00|
472|Column|0|448|451|NULL|00|
473|Column|0|449|452|NULL|00|
474|Column|0|450|453|NULL|00|
475|Column|0|451|454|NULL|00|
476|Column|0|452|455|NULL|00|
477|Column|0|453|456|NULL|00|
478|Column|0|454|457|NULL|00|
479|Column|0|455|458|NULL|00|
480|Column|0|456|459|NULL|00|
481|Column|0|457|460|NULL|00|
482|Column|0|458|461|NULL|00|
483|Column|0|459|462|NULL|00|
484|Column|0|460|463|NULL|00|
485|Column|0|461|464|NULL|00|
486|Column|0|462|465|NULL|00|
487|Column|0|463|466|NULL|00|
488|Column|0|464|467|NULL|00|
489|Column|0|465|468|NULL|00|
490|Column|0|466|469|NULL|00|
491|Column|0|467|470|NULL|00|
492|Column|0|468|471|NULL|00|
493|Column|0|469|472|NULL|00|
494|Column|0|470|473|NULL|00|
495|Column|0|471|474|NULL|00|
496|Column|0|472|475|NULL|00|
497|Column|0|473|476|NULL|00|
498|Column|0|474|477|NULL|00|
499|Column|0|475|478|NULL|00|
500|Column|0|476|479|NULL|00|
501|Column|0|477|480|NULL|00|
502|Column|0|478|481|NULL|00|
503|Column|0|479|482|NULL|00|
504|Column|0|480|483|NULL|00|
505|Column|0|481|484|NULL|00|
506|Column|0|482|485|NULL|00|
507|Column|0|483|486|NULL|00|
508|Column|0|484|487|NULL|00|
509|Column|0|485|488|NULL|00|
510|Column|0|486|489|NULL|00|
511|Column|0|487|490|NULL|00|
512|Column|0|488|491|NULL|00|
513|Column|0|489|492||00|
514|Column|0|490|493||00|
515|Column|0|491|494||00|
516|Null|0|497|0||00|
517|Integer|1|498|0||00|
518|OpenRead|3|3609199|0|1|00|
519|Rewind|3|527|0||00|
520|Column|3|0|499||00|
521|Column|0|352|500||00|
522|Ne|500|526|499|collseq(BINARY)|6a|
523|Column|0|492|501||00|
524|Move|501|497|0||00|
525|IfZero|498|527|-1||00|
526|Next|3|520|0||01|
527|Close|3|0|0||00|
528|SCopy|497|495|0||00|
529|Column|0|493|496||00|
530|NotExists|0|531|2||00|
531|MakeRecord|3|494|500|ddddaddadddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddddddddddddddddddddddddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadddddddeaaaaaaaaaaaaaaaaaaaaaaaaddddddddddddddddddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddddddddaaaaaaaddddddddaaddaddddddddddddddddddddddddeddddaddddddddddddddddddddddddddddddddddddddddddddddddddddddaddaaadddddddedaddaddddddddddddddddddddddddddddddddddddddddadedaddeeddeeaeeebbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|00|
532|Insert|0|500|2|core|05|
533|Goto|0|10|0||00|
534|Close|0|0|0||00|
535|Halt|0|0|0||00|
536|Transaction|0|1|0||00|
537|VerifyCookie|0|171|0||00|
538|TableLock|0|255|1|core|00|
539|TableLock|0|3609199|0|clinicCountsByzip|00|
540|Goto|0|2|0||00|
4

1 回答 1

1

不幸的是,如果您使用一个简单的查询,例如您在 24 小时后杀死的示例,您将永远不会得到关于完成的距离或距离的任何反馈。

我有一些类似的经验,但记录少得多(在 30,000 范围内),并且在一个有超过 150 列的表中(我知道很多)。

当我尝试您基本上在做的事情时,我一直在等待,然后终于出现了内存不足的异常。我的问题是我将 30,000 多个更新命令加载到单个事务中以尝试加速更新,这占用了太多内存。

现在在你的情况下,我使用两个循环。第一个循环从表中获取更新查询所需的所有数据(主键,以及设置正在修改的列的值所需的任何其他数据)。

在开始第二个循环之前,我声明一个等于 0 的整数,然后说“开始交易”。每次我运行循环时,我都会在该整数上加 1。每当整数达到 1,000 时,我就提交事务(并释放它现在占用的内存)并开始一个全新的事务,并将整数设置回 0。当我最终退出第二个循环时,我提交最后一笔交易。

我相信你可以做同样的事情来更新你的 1300 万行。你甚至可以让代码一次只更新 50 万条左右的记录,如果整个数据库要花费 24 小时以上来更新那么多记录,那么每天都要更新这么多。

于 2013-11-14T20:31:57.417 回答