Heim Datenbank MySQL-Tutorial select * from table 时间长_MySQL

select * from table 时间长_MySQL

May 30, 2016 pm 05:10 PM
时间

优化中发现一个存储过程执行20秒通过profiler 抓取发现时间主要消耗在一个select * from 表,那么问题来了select几万数据竟然花了将近20秒?

 

问题排查清了程序前端使用了datareader获取数据,那么datareader对数据库有什么影响呢?下面来做个实验测试一下。首先我们创建测试表并插入200条数据。

 

1 CREATE TABLE [dbo].[table_2](

2     [a] [int] NULL,

3     [b] [datetime] NULL,

4     [c] [uniqueidentifier] NOT NULL

5 )

7 insert into [table_2]

8 select 1,getdate(),newid()

9 go 200

 

编写一段简单的C#小程序,使用datareader读取一个select * from table 在datareader的循环中我们设置线程等待50毫秒。System.Threading.Thread.Sleep(50);

protected void Button1_Click(object sender, EventArgs e)
        {


            //SqlCommand sqlCmd = new SqlCommand("p_datareader_test", con);
            //sqlCmd.Connection = con;
            //sqlCmd.CommandType = CommandType.StoredProcedure;//设置调用的类型为存储过程  

            //SqlParameter sqlParme = new SqlParameter();
            //sqlParme = sqlCmd.Parameters.Add("@p", SqlDbType.Int);
            //sqlParme.Direction = ParameterDirection.Input;
            //sqlParme.Value = 0;

            //SqlDataReader reader = sqlCmd.ExecuteReader();

            SqlConnection con = new SqlConnection();
            con.ConnectionString = "server=vpc-new3;database=replication;uid=sa;pwd=sa_123456";
            DataTable dt = new DataTable();


            //SQL直接查询测试-------------------------------
            con.Open();
            SqlCommand com = new SqlCommand();
            com.Connection = con;
            com.CommandType = CommandType.Text;
            com.CommandText = "select * from table_2";


            SqlDataReader reader = com.ExecuteReader();

            DataRow dtr  = dt.NewRow () ;

            try
            {
                DataTable objDataTable = new DataTable();
                int intFieldCount = reader.FieldCount;
                for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
                {
                    objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
                }
                objDataTable.BeginLoadData();

                object[] objValues = new object[intFieldCount];
                while (reader.Read())
                {
                    //系统等待
                    System.Threading.Thread.Sleep(50);
                    reader.GetValues(objValues);
                    objDataTable.LoadDataRow(objValues, true);
                }
                reader.Close();
                objDataTable.EndLoadData();

                GV .DataSource = objDataTable;
                GV.DataBind();
                
            }
            catch (Exception ex)
            {
                throw new Exception("转换出错!", ex);
            }
            reader.Close();
            con.Close();

        }
Nach dem Login kopieren

 

 

下面来测试执行一下:

 

点击按钮出发btnclick

select * from table 时间长_MySQL

执行时间0毫秒?竟然不像想象中的时间会长? 这是为什么呢?

 

测试继续! 我们加大数据,继续添加200条。

 

insert into [table_2]

select 1,getdate(),newid()

go 200

 

测试效果一样0毫秒。

 

继续增加200 条 目前数据600条

select * from table 时间长_MySQL

看一下效果:

select * from table 时间长_MySQL

效果神奇的出现了 600条记录的查询需要12秒!!

 

我们再一次执行观察一下竟然12秒才执行完肯定会有等待!

 

select wait_type,brt.text from sys.dm_exec_requests br 

         OUTER APPLY sys.dm_exec_sql_text(br.sql_handle) AS brt

         where brt.text like '%table_2%'

select * from table 时间长_MySQL

没错就是他 传说中的ASYNE_NETWORK_IO 

 

疑问:按照之前的理解datareader 一次只是读取一条记录...那么为什么我400条记录的时候就不会出现等待呢?

 

想到了发送的网络包大小,mssql默认为4096

select * from table 时间长_MySQL

那么我们继续用200条数据测试这次加大表的长度

 

drop table table_2

 

CREATE TABLE [dbo].[table_2](

    [a] [int] NULL,

    [b] [datetime] NULL,

    [c] [uniqueidentifier] NOT NULL,

    d char(4000)

)

 

insert into [table_2]

select 1,getdate(),newid(),'test'

go 200

 

再次测试执行观察效果

select * from table 时间长_MySQL

好吧我猜对了....

 

后续用dataset接收返回结果就不会出现上述问题,所以如网上所说datareader接收结果集使用要注意接收结果后要避免在循环中有大量的耗时处理。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie viel kostet ein Douyin-Lichtschild der Stufe 10? Wie viele Tage dauert es, ein Fanschild der Stufe 10 zu erstellen? Wie viel kostet ein Douyin-Lichtschild der Stufe 10? Wie viele Tage dauert es, ein Fanschild der Stufe 10 zu erstellen? Mar 11, 2024 pm 05:37 PM

Auf der Douyin-Plattform streben viele Benutzer danach, eine Level-Zertifizierung zu erhalten, und das Lichtzeichen der Stufe 10 zeigt den Einfluss und die Anerkennung des Benutzers auf Douyin. In diesem Artikel geht es um den Preis der Level-10-Lightboards von Douyin und um die Zeit, die es braucht, um dieses Level zu erreichen, um den Benutzern ein besseres Verständnis des Prozesses zu ermöglichen. 1. Wie viel kostet ein Douyin-Lichtschild der Stufe 10? Der Preis der 10-stufigen Lichtschilder von Douyin variiert je nach Marktschwankungen sowie Angebot und Nachfrage. Der allgemeine Preis liegt zwischen einigen tausend Yuan und zehntausend Yuan. In diesem Preis sind hauptsächlich die Kosten für das Lichtschild selbst und eventuelle Servicegebühren enthalten. Benutzer können Lichtschilder der Stufe 10 über die offiziellen Kanäle von Douyin oder über Drittanbieter-Serviceagenturen kaufen, sollten beim Kauf jedoch auf legale Kanäle achten, um falsche oder betrügerische Transaktionen zu vermeiden. 2. Wie viele Tage dauert die Erstellung eines Level-10-Fanschilds? Erreiche das Lichtzeichen der Stufe 10

Kann Linux die Systemzeit zurücksetzen? Kann Linux die Systemzeit zurücksetzen? Mar 13, 2023 am 10:50 AM

Linux kann die Systemzeit zurücksetzen: 1. Verwenden Sie den Befehl date, um die Uhrzeit zu überprüfen. 2. Verwenden Sie den Befehl „yum install ntp“, um ntp zu installieren „Befehl zum Implementieren der Netzwerkzeit. Einfach synchronisieren.

Wie lange dauert es, den Elden Ring zu räumen? Wie lange dauert es, den Elden Ring zu räumen? Mar 11, 2024 pm 12:50 PM

Spieler können die Haupthandlung des Spiels erleben und Spielerfolge sammeln, wenn sie in Elden's Circle spielen. Viele Spieler wissen nicht, wie lange es dauert, Elden's Circle zu bewältigen. Wie lange dauert es, den Elden Ring zu räumen? Antwort: 30 Stunden. 1. Diese 30-Stunden-Räumungszeit bezieht sich zwar nicht auf einen meisterhaften Speed-Pass, lässt aber auch viele Prozesse aus. 2. Wenn Sie ein besseres Spielerlebnis erhalten oder die komplette Handlung erleben möchten, müssen Sie auf jeden Fall mehr Zeit in die Dauer investieren. 3. Wenn die Spieler sie alle sammeln, dauert es etwa 100–120 Stunden. 4. Wenn Sie zum Bürsten von BOSS nur den Hauptfaden verwenden, dauert dies etwa 50–60 Stunden. 5. Wenn Sie alles erleben möchten: 150 Stunden Basiszeit.

So entfernen Sie Stunden, Minuten und Sekunden aus der Zeit in PHP So entfernen Sie Stunden, Minuten und Sekunden aus der Zeit in PHP Mar 13, 2023 am 11:20 AM

So entfernen Sie mit PHP Stunden, Minuten und Sekunden aus der Zeit: 1. Erstellen Sie eine PHP-Beispieldatei. 2. Verwenden Sie die Funktion strtotime, um Datum und Uhrzeit in einen Zeitstempel umzuwandeln. 3. Verwenden Sie die Datumsfunktion, um das Datum oder die Uhrzeit zu formatieren um die Stunden, Minuten und Sekunden zu entfernen.

Warum dauert die Kompilierung meines Go-Programms länger? Warum dauert die Kompilierung meines Go-Programms länger? Jun 09, 2023 pm 06:00 PM

In den letzten Jahren ist die Sprache Go für immer mehr Entwickler zur Wahl geworden. Im Vergleich zu anderen Programmiersprachen ist die Kompilierungsgeschwindigkeit der Go-Sprache jedoch nicht hoch genug. Viele Entwickler werden beim Kompilieren von Go-Programmen auf dieses Problem stoßen: Warum dauert das Kompilieren meines Go-Programms länger? In diesem Artikel wird dieses Problem unter verschiedenen Aspekten untersucht. Die Compiler-Architektur der Go-Sprache Die Compiler-Architektur der Go-Sprache verwendet ein dreistufiges Design: Front-End, Mittelschicht und Back-End. Das Front-End ist für die Übersetzung des Quellcodes in Zwischencode in der Go-Sprache verantwortlich, und die mittlere Ebene übernimmt die Aufgabe

Wie legt man den Zeitpunkt für die Veröffentlichung von Werken auf Xiaohongshu fest? Ist der Zeitpunkt für die Veröffentlichung der Arbeit korrekt? Wie legt man den Zeitpunkt für die Veröffentlichung von Werken auf Xiaohongshu fest? Ist der Zeitpunkt für die Veröffentlichung der Arbeit korrekt? Mar 24, 2024 pm 01:31 PM

Xiaohongshu, eine Plattform voller Leben und Wissensaustausch, ermöglicht es immer mehr Kreativen, ihre Meinung frei zu äußern. Um mehr Aufmerksamkeit und Likes auf Xiaohongshu zu bekommen, ist neben der Qualität der Inhalte auch der Zeitpunkt der Veröffentlichung der Werke entscheidend. Wie legt man also den Zeitpunkt fest, zu dem Xiaohongshu seine Werke veröffentlichen soll? 1. Wie legt man den Zeitpunkt für die Veröffentlichung von Werken auf Xiaohongshu fest? 1. Verstehen Sie die aktive Zeit der Benutzer. Zunächst muss die aktive Zeit der Xiaohongshu-Benutzer geklärt werden. Im Allgemeinen sind 20:00 bis 22:00 Uhr und Wochenendnachmittage die Zeiten, in denen die Benutzeraktivität hoch ist. Allerdings variiert dieser Zeitraum auch je nach Faktoren wie Zielgruppensegment und Geografie. Um die aktive Zeit der Nutzer besser zu erfassen, empfiehlt es sich daher, eine detailliertere Analyse der Verhaltensgewohnheiten verschiedener Gruppen durchzuführen. Indem wir das Leben der Benutzer verstehen

Ausführliche Erläuterung der Linux-Techniken zum Anzeigen der Dateizeit Ausführliche Erläuterung der Linux-Techniken zum Anzeigen der Dateizeit Feb 21, 2024 pm 01:15 PM

Ausführliche Erläuterung der Linux-Techniken zur Dateizeitanzeige In Linux-Systemen sind Dateizeitinformationen für die Dateiverwaltung und Nachverfolgung von Änderungen sehr wichtig. Das Linux-System zeichnet Dateiänderungsinformationen über drei Hauptzeitattribute auf, nämlich Zugriffszeit (atime), Änderungszeit (mtime) und Änderungszeit (ctime). In diesem Artikel wird detailliert beschrieben, wie diese Dateizeitinformationen angezeigt und verwaltet werden, und es werden spezifische Codebeispiele bereitgestellt. 1. Überprüfen Sie die Dateizeitinformationen, indem Sie den Befehl ls mit dem Parameter -l verwenden, um die Dateien aufzulisten.

So verwenden Sie die Zeit- und Datumsmodule in Python So verwenden Sie die Zeit- und Datumsmodule in Python Oct 16, 2023 am 08:11 AM

So verwenden Sie die Zeit- und Datumsmodule in Python. Einführung: In der Programmierung ist der Umgang mit Zeit und Datum eine sehr häufige Aufgabe. Python bietet leistungsstarke Zeit- und Datumsmodule, die Zeit- und Datumsoperationen einfacher und bequemer machen. In diesem Artikel werden die Zeit- und Datumsmodule in Python vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, sie besser zu verstehen und anzuwenden. 1. Einführung in das Zeit- und Datumsmodul Das in Python integrierte Zeit- und Datumsmodul ist das Datum/Uhrzeit-Modul. Wir müssen dieses Modul zuerst vorstellen.

See all articles