类似groupby的分组计数功能
之前同事发过一个语句,实现的功能比较简单,类似group by的分组计数功能,因为where条件有like,又无法用group by来实现。SELECT a.N0,b.N1,c.N2,d.N3,e.N4,f.N5,g.N6,h.N7,i.N8,j.N9 from (select count(*) N0 from tbl_loginfo_20141110 where keyrecord
之前同事发过一个语句,实现的功能比较简单,类似group by的分组计数功能,因为where条件有like,又无法用group by来实现。 SELECT a.N0,b.N1,c.N2,d.N3,e.N4,f.N5,g.N6,h.N7,i.N8,j.N9 from (select count(*) N0 from tbl_loginfo_20141110 where keyrecord like '0%' or keyrecord like 'GJ_0%') a, (select count(*) N1 from tbl_loginfo_20141110 where keyrecord like '1%' or keyrecord like 'GJ_1%') b, (select count(*) N2 from tbl_loginfo_20141110 where keyrecord like '2%' or keyrecord like 'GJ_2%') c, (select count(*) N3 from tbl_loginfo_20141110 where keyrecord like '3%' or keyrecord like 'GJ_3%') d, (select count(*) N4 from tbl_loginfo_20141110 where keyrecord like '4%' or keyrecord like 'GJ_4%') e, (select count(*) N5 from tbl_loginfo_20141110 where keyrecord like '5%' or keyrecord like 'GJ_5%') f, (select count(*) N6 from tbl_loginfo_20141110 where keyrecord like '6%' or keyrecord like 'GJ_6%') g, (select count(*) N7 from tbl_loginfo_20141110 where keyrecord like '7%' or keyrecord like 'GJ_7%') h, (select count(*) N8 from tbl_loginfo_20141110 where keyrecord like '8%' or keyrecord like 'GJ_8%') i, (select count(*) N9 from tbl_loginfo_20141110 where keyrecord like '9%' or keyrecord like 'GJ_9%') j; 为了了解语句的性能,我做了如下类似的测试: select * from v$version; --Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production drop table a; create table a as select * from dba_objects where rownum<=50000; begin for x in 1..6 loop insert into a select * from a; end loop; commit; end; select count(*) from a; --3200000 select bytes/1024/1024 from user_segments where segment_name='A'; --357M alter system flush shared_pool; alter system flush buffer_cache; SELECT a.N0,b.N1,c.N2,d.N3,e.N4,f.N5,g.N6,h.N7,i.N8,j.N9 from (select count(*) N0 from a where object_name like 'A%' or object_name like 'V%') a, (select count(*) N1 from a where object_name like 'B%' or object_name like 'V%') b, (select count(*) N2 from a where object_name like 'C%' or object_name like 'V%') c, (select count(*) N3 from a where object_name like 'D%' or object_name like 'V%') d, (select count(*) N4 from a where object_name like 'E%' or object_name like 'V%') e, (select count(*) N5 from a where object_name like 'F%' or object_name like 'V%') f, (select count(*) N6 from a where object_name like 'G%' or object_name like 'V%') g, (select count(*) N7 from a where object_name like 'H%' or object_name like 'V%') h, (select count(*) N8 from a where object_name like 'I%' or object_name like 'V%') i, (select count(*) N9 from a where object_name like 'J%' or object_name like 'V%') j; --58s alter system flush shared_pool; alter system flush buffer_cache; --改写后 select sum(case when object_name like 'A%' or object_name like 'V%' then 1 else 0 end) N0, sum(case when object_name like 'B%' or object_name like 'V%' then 1 else 0 end) N1, sum(case when object_name like 'C%' or object_name like 'V%' then 1 else 0 end) N2, sum(case when object_name like 'D%' or object_name like 'V%' then 1 else 0 end) N3, sum(case when object_name like 'E%' or object_name like 'V%' then 1 else 0 end) N4, sum(case when object_name like 'F%' or object_name like 'V%' then 1 else 0 end) N5, sum(case when object_name like 'G%' or object_name like 'V%' then 1 else 0 end) N6, sum(case when object_name like 'H%' or object_name like 'V%' then 1 else 0 end) N7, sum(case when object_name like 'I%' or object_name like 'V%' then 1 else 0 end) N8, sum(case when object_name like 'J%' or object_name like 'V%' then 1 else 0 end) N9 from a; --19s --对比执行计划: --前者执行计划: SQL> explain plan for 2 SELECT a.N0,b.N1,c.N2,d.N3,e.N4,f.N5,g.N6,h.N7,i.N8,j.N9 from 3 (select count(*) N0 from a where object_name like 'A%' or object_name like 'V%') a, 4 (select count(*) N1 from a where object_name like 'B%' or object_name like 'V%') b, 5 (select count(*) N2 from a where object_name like 'C%' or object_name like 'V%') c, 6 (select count(*) N3 from a where object_name like 'D%' or object_name like 'V%') d, 7 (select count(*) N4 from a where object_name like 'E%' or object_name like 'V%') e, 8 (select count(*) N5 from a where object_name like 'F%' or object_name like 'V%') f, 9 (select count(*) N6 from a where object_name like 'G%' or object_name like 'V%') g, 10 (select count(*) N7 from a where object_name like 'H%' or object_name like 'V%') h, 11 (select count(*) N8 from a where object_name like 'I%' or object_name like 'V%') i, 12 (select count(*) N9 from a where object_name like 'J%' or object_name like 'V%') j; Explained. Elapsed: 00:00:00.15 SQL> @getplan 'general,outline,starts' Enter value for plan type: PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------- Plan hash value: 2527411742 ------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 130 | 123K (1)| 00:24:46 | | 1 | NESTED LOOPS | | 1 | 130 | 123K (1)| 00:24:46 | | 2 | NESTED LOOPS | | 1 | 117 | 111K (1)| 00:22:17 | | 3 | NESTED LOOPS | | 1 | 104 | 99032 (1)| 00:19:49 | | 4 | NESTED LOOPS | | 1 | 91 | 86653 (1)| 00:17:20 | | 5 | NESTED LOOPS | | 1 | 78 | 74274 (1)| 00:14:52 | | 6 | NESTED LOOPS | | 1 | 65 | 61895 (1)| 00:12:23 | | 7 | NESTED LOOPS | | 1 | 52 | 49516 (1)| 00:09:55 | | 8 | NESTED LOOPS | | 1 | 39 | 37137 (1)| 00:07:26 | | 9 | NESTED LOOPS | | 1 | 26 | 24758 (1)| 00:04:58 | | 10 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 11 | SORT AGGREGATE | | 1 | 66 | | | |* 12 | TABLE ACCESS FULL| A | 91587 | 5903K| 12379 (1)| 00:02:29 | | 13 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 14 | SORT AGGREGATE | | 1 | 66 | | | |* 15 | TABLE ACCESS FULL| A | 137K| 8831K| 12379 (1)| 00:02:29 | | 16 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 17 | SORT AGGREGATE | | 1 | 66 | | | |* 18 | TABLE ACCESS FULL | A | 85818 | 5531K| 12379 (1)| 00:02:29 | | 19 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 20 | SORT AGGREGATE | | 1 | 66 | | | |* 21 | TABLE ACCESS FULL | A | 111K| 7158K| 12379 (1)| 00:02:29 | | 22 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 23 | SORT AGGREGATE | | 1 | 66 | | | |* 24 | TABLE ACCESS FULL | A | 86539 | 5577K| 12379 (1)| 00:02:29 | | 25 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 26 | SORT AGGREGATE | | 1 | 66 | | | |* 27 | TABLE ACCESS FULL | A | 91587 | 5903K| 12379 (1)| 00:02:29 | | 28 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 29 | SORT AGGREGATE | | 1 | 66 | | | |* 30 | TABLE ACCESS FULL | A | 228K| 14M| 12379 (1)| 00:02:29 | | 31 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 32 | SORT AGGREGATE | | 1 | 66 | | | |* 33 | TABLE ACCESS FULL | A | 87981 | 5670K| 12379 (1)| 00:02:29 | | 34 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 35 | SORT AGGREGATE | | 1 | 66 | | | |* 36 | TABLE ACCESS FULL | A | 84376 | 5438K| 12379 (1)| 00:02:29 | | 37 | VIEW | | 1 | 13 | 12379 (1)| 00:02:29 | | 38 | SORT AGGREGATE | | 1 | 66 | | | |* 39 | TABLE ACCESS FULL | A | 112K| 7251K| 12379 (1)| 00:02:29 | ------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 12 - filter("OBJECT_NAME" LIKE 'J%' OR "OBJECT_NAME" LIKE 'V%') 15 - filter("OBJECT_NAME" LIKE 'I%' OR "OBJECT_NAME" LIKE 'V%') 18 - filter("OBJECT_NAME" LIKE 'H%' OR "OBJECT_NAME" LIKE 'V%') 21 - filter("OBJECT_NAME" LIKE 'G%' OR "OBJECT_NAME" LIKE 'V%') 24 - filter("OBJECT_NAME" LIKE 'F%' OR "OBJECT_NAME" LIKE 'V%') 27 - filter("OBJECT_NAME" LIKE 'E%' OR "OBJECT_NAME" LIKE 'V%') 30 - filter("OBJECT_NAME" LIKE 'D%' OR "OBJECT_NAME" LIKE 'V%') 33 - filter("OBJECT_NAME" LIKE 'C%' OR "OBJECT_NAME" LIKE 'V%') 36 - filter("OBJECT_NAME" LIKE 'B%' OR "OBJECT_NAME" LIKE 'V%') 39 - filter("OBJECT_NAME" LIKE 'A%' OR "OBJECT_NAME" LIKE 'V%') --后者执行计划: SQL> explain plan for 2 select 3 sum(case when object_name like 'A%' or object_name like 'V%' then 1 else 0 end) N0, 4 sum(case when object_name like 'B%' or object_name like 'V%' then 1 else 0 end) N1, 5 sum(case when object_name like 'C%' or object_name like 'V%' then 1 else 0 end) N2, 6 sum(case when object_name like 'D%' or object_name like 'V%' then 1 else 0 end) N3, 7 sum(case when object_name like 'E%' or object_name like 'V%' then 1 else 0 end) N4, 8 sum(case when object_name like 'F%' or object_name like 'V%' then 1 else 0 end) N5, 9 sum(case when object_name like 'G%' or object_name like 'V%' then 1 else 0 end) N6, 10 sum(case when object_name like 'H%' or object_name like 'V%' then 1 else 0 end) N7, 11 sum(case when object_name like 'I%' or object_name like 'V%' then 1 else 0 end) N8, 12 sum(case when object_name like 'J%' or object_name like 'V%' then 1 else 0 end) N9 13 from a; Explained. Elapsed: 00:00:00.01 SQL> @getplan 'general,outline,starts' Enter value for plan type: PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------- Plan hash value: 3918351354 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 66 | 12349 (1)| 00:02:29 | | 1 | SORT AGGREGATE | | 1 | 66 | | | | 2 | TABLE ACCESS FULL| A | 3097K| 194M| 12349 (1)| 00:02:29 | --------------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement (level=2) 可以看出,前者10次全表扫描,后者1次全表扫描。从而时间上也大大降低了。由58s降低到19s。 优化这个sql主要还是思路的转换,难点在于怎样把10次全表扫描转化成1次全表扫描。 在OLAP中,可以加并行使sql速度更快。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Akan terdapat banyak fungsi penciptaan AI dalam apl Doubao, jadi apakah fungsi apl Doubao? Pengguna boleh menggunakan perisian ini untuk membuat lukisan, berbual dengan AI, menjana artikel untuk pengguna, membantu semua orang mencari lagu, dsb. Pengenalan fungsi apl Doubao ini boleh memberitahu anda kaedah operasi khusus Kandungan khusus ada di bawah, jadi lihat! Apakah fungsi apl Doubao Jawapan: Anda boleh melukis, bersembang, menulis artikel dan mencari lagu. Pengenalan fungsi: 1. Pertanyaan soalan: Anda boleh menggunakan AI untuk mencari jawapan kepada soalan dengan lebih pantas, dan anda boleh bertanya apa-apa jenis soalan. 2. Penjanaan gambar: AI boleh digunakan untuk mencipta gambar yang berbeza untuk semua orang Anda hanya perlu memberitahu semua orang keperluan umum. 3. Sembang AI: boleh mencipta AI yang boleh berbual untuk pengguna,

Kedua-dua telefon bimbit vivox100s dan x100 adalah model yang mewakili dalam barisan produk telefon mudah alih vivo, masing-masing mewakili tahap teknologi canggih vivo dalam tempoh masa yang berbeza. Artikel ini akan menjalankan perbandingan terperinci antara kedua-dua telefon mudah alih ini dari segi perbandingan prestasi dan analisis fungsi untuk membantu pengguna memilih telefon mudah alih yang sesuai dengan mereka dengan lebih baik. Mula-mula, mari kita lihat perbandingan prestasi antara vivox100s dan x100. vivox100s dilengkapi dengan yang terbaru

JPA dan MyBatis: Analisis Perbandingan Fungsi dan Prestasi Pengenalan: Dalam pembangunan Java, rangka kerja kegigihan memainkan peranan yang sangat penting. Rangka kerja kegigihan biasa termasuk JPA (JavaPersistenceAPI) dan MyBatis. Artikel ini akan menjalankan analisis perbandingan fungsi dan prestasi kedua-dua rangka kerja dan menyediakan contoh kod khusus. 1. Perbandingan fungsi: JPA: JPA ialah sebahagian daripada JavaEE dan menyediakan penyelesaian kegigihan data berorientasikan objek. Ia diluluskan anotasi atau X

Dengan perkembangan pesat Internet, konsep media kendiri telah berakar umbi dalam hati orang ramai. Jadi, apakah sebenarnya media kendiri? Apakah ciri dan fungsi utamanya? Seterusnya, kita akan meneroka isu-isu ini satu demi satu. 1. Apakah sebenarnya media kendiri? Kami-media, seperti namanya, bermakna anda adalah media. Ia merujuk kepada pembawa maklumat yang melaluinya individu atau pasukan boleh mencipta, mengedit, menerbitkan dan menyebarkan kandungan secara bebas melalui platform Internet. Berbeza dengan media tradisional, seperti akhbar, televisyen, radio, dan lain-lain, media kendiri lebih interaktif dan diperibadikan, membolehkan semua orang menjadi pengeluar dan penyebar maklumat. 2. Apakah ciri dan fungsi utama media kendiri? 1. Ambang rendah: Peningkatan media kendiri telah menurunkan ambang untuk memasuki industri media Peralatan yang rumit dan pasukan profesional tidak lagi diperlukan.

"Meneroka Discuz: Definisi, Fungsi dan Contoh Kod" Dengan perkembangan pesat Internet, forum komuniti telah menjadi platform penting untuk orang ramai mendapatkan maklumat dan bertukar pendapat. Di antara banyak sistem forum komuniti, Discuz, sebagai perisian forum sumber terbuka yang terkenal di China, digemari oleh majoriti pembangun dan pentadbir laman web. Jadi, apa itu Discuz? Apakah fungsi yang ada padanya, dan bagaimana ia boleh membantu tapak web kami? Artikel ini akan memperkenalkan Discuz secara terperinci dan melampirkan contoh kod khusus untuk membantu pembaca mengetahui lebih lanjut mengenainya.

Apakah yang dilakukan oleh penyesuai Bluetooth? Dengan perkembangan berterusan sains dan teknologi, teknologi komunikasi tanpa wayar juga telah dibangunkan dan dipopularkan dengan pantas. Antaranya, teknologi Bluetooth, sebagai teknologi komunikasi tanpa wayar jarak dekat, digunakan secara meluas dalam penghantaran data dan sambungan antara pelbagai peranti. Penyesuai Bluetooth memainkan peranan penting sebagai peranti penting yang menyokong komunikasi Bluetooth. Penyesuai Bluetooth ialah peranti yang boleh menukar peranti bukan Bluetooth kepada peranti yang menyokong komunikasi Bluetooth. Ia merealisasikan sambungan wayarles dan penghantaran data antara peranti dengan menukar isyarat wayarles kepada isyarat Bluetooth. Penyesuai Bluetooth

Memandangkan Xiaohongshu menjadi popular di kalangan golongan muda, semakin ramai orang mula menggunakan platform ini untuk berkongsi pelbagai aspek pengalaman dan pandangan hidup mereka. Cara mengurus berbilang akaun Xiaohongshu dengan berkesan telah menjadi isu utama. Dalam artikel ini, kami akan membincangkan beberapa ciri perisian pengurusan akaun Xiaohongshu dan meneroka cara mengurus akaun Xiaohongshu anda dengan lebih baik. Apabila media sosial berkembang, ramai orang mendapati diri mereka perlu mengurus berbilang akaun sosial. Ini juga merupakan satu cabaran untuk pengguna Xiaohongshu. Sesetengah perisian pengurusan akaun Xiaohongshu boleh membantu pengguna mengurus berbilang akaun dengan lebih mudah, termasuk penerbitan kandungan automatik, penerbitan berjadual, analisis data dan fungsi lain. Melalui alatan ini, pengguna boleh mengurus akaun mereka dengan lebih cekap dan meningkatkan pendedahan dan perhatian akaun mereka. Di samping itu, perisian pengurusan akaun Xiaohongshu mempunyai

Tip PHP: Cepat melaksanakan fungsi kembali ke halaman sebelumnya Dalam pembangunan web, kita sering menghadapi keperluan untuk melaksanakan fungsi kembali ke halaman sebelumnya. Operasi sedemikian boleh meningkatkan pengalaman pengguna dan memudahkan pengguna menavigasi antara halaman web. Dalam PHP, kita boleh mencapai fungsi ini melalui beberapa kod mudah. Artikel ini akan memperkenalkan cara cepat melaksanakan fungsi kembali ke halaman sebelumnya dan memberikan contoh kod PHP tertentu. Dalam PHP, kita boleh menggunakan $_SERVER['HTTP_REFERER'] untuk mendapatkan URL halaman sebelumnya
