select * from table 时间长_MySQL
优化中发现一个存储过程执行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 )
6
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(); }
下面来测试执行一下:
点击按钮出发btnclick
执行时间0毫秒?竟然不像想象中的时间会长? 这是为什么呢?
测试继续! 我们加大数据,继续添加200条。
insert into [table_2]
select 1,getdate(),newid()
go 200
测试效果一样0毫秒。
继续增加200 条 目前数据600条
看一下效果:
效果神奇的出现了 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%'
没错就是他 传说中的ASYNE_NETWORK_IO
疑问:按照之前的理解datareader 一次只是读取一条记录...那么为什么我400条记录的时候就不会出现等待呢?
想到了发送的网络包大小,mssql默认为4096
那么我们继续用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
再次测试执行观察效果
好吧我猜对了....
后续用dataset接收返回结果就不会出现上述问题,所以如网上所说datareader接收结果集使用要注意接收结果后要避免在循环中有大量的耗时处理。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sur la plateforme Douyin, de nombreux utilisateurs sont impatients d'obtenir une certification de niveau, et le panneau lumineux de niveau 10 montre l'influence et la reconnaissance de l'utilisateur sur Douyin. Cet article examinera le prix des cartes lumineuses Douyin niveau 10 et le temps nécessaire pour atteindre ce niveau afin d'aider les utilisateurs à mieux comprendre le processus. 1. Combien coûte un panneau lumineux Douyin de niveau 10 ? Le prix du panneau lumineux à 10 niveaux de Douyin varie en fonction des fluctuations du marché et de l'offre et de la demande. Le prix général varie de quelques milliers de yuans à dix mille yuans. Ce prix comprend principalement le coût de l'enseigne lumineuse elle-même et les éventuels frais de service. Les utilisateurs peuvent acheter des panneaux lumineux de niveau 10 via les canaux officiels de Douyin ou des agences de services tierces, mais ils doivent faire attention aux canaux légaux lors de l'achat pour éviter les transactions fausses ou frauduleuses. 2. Combien de jours faut-il pour créer un panneau de fan de niveau 10 ? Atteindre le panneau lumineux de niveau 10

Linux peut réinitialiser l'heure du système. La méthode de réinitialisation est la suivante : 1. Utilisez la commande date pour vérifier l'heure ; 2. Utilisez la commande "yum install ntp" pour installer ntp ; " commande pour implémenter l'heure du réseau. Synchronisez simplement.

Les joueurs peuvent découvrir l'intrigue principale du jeu et collecter des succès de jeu lorsqu'ils jouent dans Elden's Circle. De nombreux joueurs ne savent pas combien de temps il faut pour terminer Elden's Circle. Le processus d'autorisation du joueur est de 30 heures. Combien de temps faut-il pour nettoyer Elden Ring ? Réponse : 30 heures. 1. Bien que ce délai de dédouanement de 30 heures ne fasse pas référence à un speed pass de type maître, il omet également de nombreux processus. 2. Si vous souhaitez obtenir une meilleure expérience de jeu ou découvrir l'intrigue complète, vous devrez certainement consacrer plus de temps à la durée. 3. Si les joueurs les récupèrent tous, cela prendra environ 100 à 120 heures. 4. Si vous prenez uniquement la ligne principale pour brosser BOSS, cela prendra environ 50 à 60 heures. 5. Si vous voulez tout vivre : 150 heures de temps de base.

Comment utiliser PHP pour supprimer les heures, les minutes et les secondes de l'heure : 1. Créez un exemple de fichier PHP ; 2. Utilisez la fonction strtotime pour convertir la date et l'heure en horodatage ; 3. Utilisez la fonction date pour formater la date ou l'heure ; pour supprimer les heures, les minutes et les secondes.

Ces dernières années, le langage Go est devenu le choix de plus en plus de développeurs. Cependant, par rapport à d’autres langages de programmation, la vitesse de compilation du langage Go n’est pas assez rapide. De nombreux développeurs rencontreront ce problème lors de la compilation de programmes Go : Pourquoi mon programme Go prend-il plus de temps à compiler ? Cet article explorera cette question sous plusieurs aspects. L'architecture du compilateur du langage Go L'architecture du compilateur du langage Go adopte une conception en trois étapes : front-end, couche intermédiaire et back-end. Le front-end est chargé de traduire le code source en code intermédiaire en langage Go, et la couche intermédiaire sera

Xiaohongshu, plateforme pleine de vie et de partage de connaissances, permet à de plus en plus de créateurs d'exprimer librement leurs opinions. Afin d'attirer plus d'attention et de likes sur Xiaohongshu, outre la qualité du contenu, le moment de publication des œuvres est également crucial. Alors, comment fixer l'heure à laquelle Xiaohongshu publie ses œuvres ? 1. Comment régler l'heure de publication des ouvrages sur Xiaohongshu ? 1. Comprendre le temps d'activité des utilisateurs. Tout d'abord, il est nécessaire de clarifier le temps d'activité des utilisateurs de Xiaohongshu. De manière générale, entre 20h et 22h et les après-midi du week-end sont les moments où l'activité des utilisateurs est forte. Cependant, cette période varie également en fonction de facteurs tels que le segment d'audience et la géographie. Par conséquent, afin de mieux appréhender la période active des utilisateurs, il est recommandé de procéder à une analyse plus détaillée des habitudes comportementales des différents groupes. En comprenant la vie des utilisateurs

Explication détaillée des techniques d'affichage de l'heure des fichiers Linux Dans les systèmes Linux, les informations sur l'heure des fichiers sont très importantes pour la gestion des fichiers et le suivi des modifications. Le système Linux enregistre les informations de modification de fichier via trois attributs temporels principaux, à savoir l'heure d'accès (atime), l'heure de modification (mtime) et l'heure de modification (ctime). Cet article explique comment afficher et gérer ces informations d'heure de fichier et fournit des exemples de code spécifiques. 1. Vérifiez les informations d'heure du fichier en utilisant la commande ls avec le paramètre -l pour répertorier les fichiers.

Comment utiliser les modules d'heure et de date en Python Introduction : En programmation, gérer l'heure et les dates est des tâches très courantes. Python fournit de puissants modules d'heure et de date, rendant les opérations d'heure et de date plus faciles et plus pratiques. Cet article présentera les modules d'heure et de date en Python et fournira des exemples de code spécifiques pour aider les lecteurs à mieux les comprendre et les appliquer. 1. Présentation du module heure et date Le module heure et date intégré de Python est le module datetime Nous devons d'abord présenter ce module.
