类似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速度更快。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Doubao-App wird viele KI-Erstellungsfunktionen enthalten. Welche Funktionen bietet die Doubao-App? Benutzer können diese Software verwenden, um Gemälde zu erstellen, mit KI zu chatten, Artikel für Benutzer zu generieren, allen bei der Suche nach Liedern zu helfen usw. Diese Funktionseinführung der Doubao-App kann Ihnen die spezifische Betriebsmethode erklären. Im Folgenden finden Sie den spezifischen Inhalt. Schauen Sie sich um! Welche Funktionen bietet die Doubao-App? Antwort: Sie können zeichnen, chatten, Artikel schreiben und Lieder finden. Funktionseinführung: 1. Fragenabfrage: Sie können KI verwenden, um schneller Antworten auf Fragen zu finden, und Sie können jede Art von Fragen stellen. 2. Bildgenerierung: Mithilfe von KI können für jeden unterschiedliche Bilder erstellt werden. Sie müssen jedem nur die allgemeinen Anforderungen mitteilen. 3. KI-Chat: Kann eine KI erstellen, die für Benutzer chatten kann,

Sowohl die Mobiltelefone vivox100s als auch x100 sind repräsentative Modelle der Mobiltelefonproduktlinie von vivo. Sie repräsentieren jeweils das High-End-Technologieniveau von vivo in unterschiedlichen Zeiträumen. Daher weisen diese beiden Mobiltelefone gewisse Unterschiede in Design, Leistung und Funktionen auf. In diesem Artikel wird ein detaillierter Vergleich dieser beiden Mobiltelefone im Hinblick auf Leistungsvergleich und Funktionsanalyse durchgeführt, um Verbrauchern dabei zu helfen, das für sie geeignete Mobiltelefon besser auszuwählen. Schauen wir uns zunächst den Leistungsvergleich zwischen vivox100s und x100 an. vivox100s ist mit dem Neusten ausgestattet

JPA und MyBatis: Vergleichende Analyse von Funktion und Leistung Einführung: In der Java-Entwicklung spielt das Persistenz-Framework eine sehr wichtige Rolle. Zu den gängigen Persistenz-Frameworks gehören JPA (JavaPersistenceAPI) und MyBatis. In diesem Artikel wird eine vergleichende Analyse der Funktionen und Leistung der beiden Frameworks durchgeführt und spezifische Codebeispiele bereitgestellt. 1. Funktionsvergleich: JPA: JPA ist Teil von JavaEE und bietet eine objektorientierte Datenpersistenzlösung. Es wird eine Annotation oder X übergeben

Mit der rasanten Entwicklung des Internets ist das Konzept der Selbstmedien tief in den Herzen der Menschen verankert. Was genau ist Self-Media? Was sind seine Hauptmerkmale und Funktionen? Als nächstes werden wir diese Probleme einzeln untersuchen. 1. Was genau ist Self-Media? Wir-Medien bedeuten, wie der Name schon sagt, dass Sie die Medien sind. Dabei handelt es sich um einen Informationsträger, über den Einzelpersonen oder Teams selbstständig Inhalte erstellen, bearbeiten, veröffentlichen und über die Internetplattform verbreiten können. Anders als traditionelle Medien wie Zeitungen, Fernsehen, Radio usw. sind Selbstmedien interaktiver und personalisierter und ermöglichen es jedem, zum Produzenten und Verbreiter von Informationen zu werden. 2. Was sind die Hauptmerkmale und Funktionen von Self-Media? 1. Niedrige Hemmschwelle: Der Aufstieg der Selbstmedien hat die Hemmschwelle für den Einstieg in die Medienbranche gesenkt und es werden keine professionellen Teams mehr benötigt.

„Discuz erkunden: Definition, Funktionen und Codebeispiele“ Mit der rasanten Entwicklung des Internets sind Community-Foren zu einer wichtigen Plattform für Menschen geworden, um Informationen zu erhalten und Meinungen auszutauschen. Unter den vielen Community-Forumsystemen wird Discuz als bekannte Open-Source-Forumsoftware in China von der Mehrheit der Website-Entwickler und -Administratoren bevorzugt. Was ist Discuz? Welche Funktionen hat es und wie kann es unserer Website helfen? In diesem Artikel wird Discuz ausführlich vorgestellt und spezifische Codebeispiele beigefügt, damit die Leser mehr darüber erfahren können.

Was macht ein Bluetooth-Adapter? Mit der kontinuierlichen Weiterentwicklung von Wissenschaft und Technologie hat sich auch die drahtlose Kommunikationstechnologie rasant weiterentwickelt und populär gemacht. Unter diesen wird die Bluetooth-Technologie als drahtlose Kommunikationstechnologie für kurze Entfernungen häufig bei der Datenübertragung und Verbindung zwischen verschiedenen Geräten verwendet. Der Bluetooth-Adapter spielt eine wichtige Rolle als wichtiges Gerät, das die Bluetooth-Kommunikation unterstützt. Ein Bluetooth-Adapter ist ein Gerät, das ein Nicht-Bluetooth-Gerät in ein Gerät verwandeln kann, das Bluetooth-Kommunikation unterstützt. Es realisiert eine drahtlose Verbindung und Datenübertragung zwischen Geräten, indem es drahtlose Signale in Bluetooth-Signale umwandelt. Bluetooth-Adapter

PHP-Tipps: Implementieren Sie schnell die Funktion zum Zurückkehren zur vorherigen Seite. Bei der Webentwicklung müssen wir häufig die Funktion zum Zurückkehren zur vorherigen Seite implementieren. Solche Vorgänge können das Benutzererlebnis verbessern und Benutzern die Navigation zwischen Webseiten erleichtern. In PHP können wir diese Funktion durch einfachen Code erreichen. In diesem Artikel wird erläutert, wie Sie die Funktion zum Zurückkehren zur vorherigen Seite schnell implementieren können, und es werden spezifische PHP-Codebeispiele bereitgestellt. In PHP können wir $_SERVER['HTTP_REFERER'] verwenden, um die URL der vorherigen Seite abzurufen

Da Xiaohongshu bei jungen Menschen immer beliebter wird, beginnen immer mehr Menschen, diese Plattform zu nutzen, um verschiedene Aspekte ihrer Erfahrungen und Lebenseinblicke auszutauschen. Die effektive Verwaltung mehrerer Xiaohongshu-Konten ist zu einem zentralen Thema geworden. In diesem Artikel werden wir einige Funktionen der Xiaohongshu-Kontoverwaltungssoftware besprechen und untersuchen, wie Sie Ihr Xiaohongshu-Konto besser verwalten können. Da die sozialen Medien wachsen, müssen viele Menschen mehrere soziale Konten verwalten. Dies ist auch eine Herausforderung für Xiaohongshu-Benutzer. Einige Xiaohongshu-Kontoverwaltungssoftware kann Benutzern dabei helfen, mehrere Konten einfacher zu verwalten, einschließlich automatischer Inhaltsveröffentlichung, geplanter Veröffentlichung, Datenanalyse und anderen Funktionen. Mithilfe dieser Tools können Benutzer ihre Konten effizienter verwalten und die Bekanntheit und Aufmerksamkeit ihres Kontos erhöhen. Darüber hinaus verfügt Xiaohongshu über eine Kontoverwaltungssoftware
