xml地图|网站地图|网站标签 [设为首页] [加入收藏]

【皇家娱乐官网】二叉树中节点的顺序插入,往

来源:http://www.ccidsi.com 作者:最新解决方案 人气:113 发布时间:2019-06-19
摘要:use DBI;my $dbh=DBI-connect("DBI:mysql:host=localhost;user=root;password=;database=sample_db");my $sth=$dbh-prepare("INSERT INTO Employee(name)VALUES(?)");my @rows = (['A'], ['B'], ['C'], ['D'], );foreach my $row (@rows ){ $name = $row-[0];
use DBI;
my $dbh=DBI->connect("DBI:mysql:host=localhost;user=root;password=;database=sample_db");

my $sth=$dbh->prepare("INSERT INTO Employee(name)VALUES(?)");
my @rows = (['A'],
             ['B'],
             ['C'],
             ['D'],
            );

foreach my $row (@rows ){
     $name = $row->[0];
     $sth->execute($name);
}
$sth=$dbh->prepare("SELECT * FROM employee");
$sth->execute();
while(my @row = $sth->fetchrow_array()){
   print "name=$row[0]n";
}
$sth->finish();
$dbh->disconnect();

布置空节点

皇家娱乐官网 1

插入空节点.png

首先须求决断插入的节点是不是为空节点
借使空节点,其不会作为父节点被实践插入操作,故不用入列

--Create DataBase  
create database BulkTestDB;  
go  
use BulkTestDB;  
go  
--Create Table  
Create table BulkTestTable(  
Id int primary key,  
UserName nvarchar(32),  
Pwd varchar(16))  
go 

简易插入

精耕细作代码

BinaryTree.prototype.insert = function (value) {
  this.insertNum   // 插入次数加1
    let node = (!value && typeof value === 'object') ? null : new Node(value) // 判断是否为空节点

  if (!this.root) { // 判断根节点是否存在
    this.root = node // 插入根节点
    node && this.queue.push(this.root) // 非空节点入列
  } else { // 插入非根节点
    let parent = this.queue[0] // 被插入的父节点
    if (!(this.insertNum % 2)) { // 通过插入次数判断左右
      parent.left = node // 插入左边
      node && this.queue.push(parent.left) // 非空节点入列
    } else {
      parent.right = node // 插入右边
      node && this.queue.push(parent.right) // 非空节点入列
      this.queue.shift() // 当前父节点parent 已经不可能再插入子节点,故出列
    }
  }
  return this
}

let binaryTree = new BinaryTree()
binaryTree.insert('A')
  .insert('B')
  .insert('C')
  .insert('D')
  .insert('E')
  .insert(null)
  .insert('F')
  .insert('G')

console.log(JSON.stringify(binaryTree.root, null, 4))

皇家娱乐官网 2

皇家娱乐官网,output2.png

三.使用简称TVPs插入数据 

展开sqlserrver,推行以下脚本:

--Create Table Valued  
CREATE TYPE BulkUdt AS TABLE  
  (Id int,  
   UserName nvarchar(32),  
   Pwd varchar(16)
)  

皇家娱乐官网 3

 

得逞后在数据库中窥见多了BulkUdt的缓存表。

运用简称TVPs插入数据

        //使用简称TVPs插入数据 [最快]
        #region [ 使用简称TVPs插入数据 ]
        static void TbaleValuedToDB(DataTable dt)
        {
            Stopwatch sw = new Stopwatch();
            SqlConnection sqlconn = new SqlConnection("server=.;database=BulkTestDB;user=sa;password=123456;");
            const string TSqlStatement =
                  "insert into BulkTestTable (Id,UserName,Pwd)"  
                  " SELECT nc.Id, nc.UserName,nc.Pwd"  
                  " FROM @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlconn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            catParam.TypeName = "dbo.BulkUdt";
            try
            {
                sqlconn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("error>"   ex.Message);
            }
            finally
            {
                sqlconn.Close();
            }
        }
        static void TVPsInsert()
        {
            Console.WriteLine("使用简称TVPs插入数据");
            Stopwatch sw = new Stopwatch();
            for (int multiply = 0; multiply < 10; multiply  )
            {
                DataTable dt = GetTableSchema();
                for (int count = multiply * 100; count < (multiply   1) * 100; count  )
                {
                    DataRow r = dt.NewRow();
                    r[0] = count;
                    r[1] = string.Format("User-{0}", count * multiply);
                    r[2] = string.Format("Pwd-{0}", count * multiply);
                    dt.Rows.Add(r);
                }
                sw.Start();
                TbaleValuedToDB(dt);
                sw.Stop();
                Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
            }
            Console.ReadLine();  
        }
        #endregion

循环插入一千条数据,每一趟插入100条,插入拾肆回,作用是更慢,前面测试,将每趟插入的数据量增大,会更加大的反映TPVS插入的频率。

皇家娱乐官网 4

 

PS:

选用新特色TVPs插入100w数据 只需2秒,实比如下:

 --创建表
  CREATE TABLE  BulkCategorySubscriber
  (
    [category_id] [int] NOT NULL,
    [subscriber_id] [int] NOT NULL,
    [added_date] [datetime] NOT NULL  DEFAULT (getdate())
 )

 --创建 type
--Create Table Valued  
CREATE TYPE BulkCategorySubscriberType AS TABLE  
(
    [category_id] [int] NOT NULL,
    [subscriber_id] [int] NOT NULL,
    [added_date] [datetime] NOT NULL  DEFAULT (getdate())
 )  

皇家娱乐官网 5

 

--1、定于 dbo.BulkCategorySubscriberType 类型变量
declare @data dbo.BulkCategorySubscriberType 

--2、将100w数据插入到@data中
insert into @data(category_id,subscriber_id,added_date)
select top 1000000 category_id,subscriber_id,added_date from NewsLetterSystem_CategorySubscriber

--3、最后将@data中数据插入到目标数据表中
insert into BulkCategorySubscriber (category_id,subscriber_id,added_date)
select category_id,subscriber_id,added_date from @data

 

皇家娱乐官网 6

 

 

 

 

#!usrbinperl
use warnings;
use strict;
use DBI;
my ($dbh, $rows);
$dbh=DBI->connect('dbi:mysql:test','root','password') || 
    die "Error opening database: $DBI::errstrn";
$rows=$dbh->do("INSERT INTO checkin VALUES ('John', 'Smith', 'Glasgow')")|| 
    die "Couldn't insert record : $DBI::errstr";
print "$rows row(s) added to checkinn";
$dbh->disconnect || die "Failed to disconnectn";

代码

运行意况node v8.4

function Node(value) {
  this.value = value
  this.left = null
  this.right = null
}

function BinaryTree() {
  this.root = null // 树根
  this.queue = [] // 存储会被使用的父节点
  this.insertNum = 0 // 记录插入操作的次数
}

BinaryTree.prototype.insert = function (value) {
  this.insertNum   // 插入次数加1
    let node = new Node(value)
  if (!this.root) { // 判断根节点是否存在
    this.root = node // 插入根节点
    this.queue.push(this.root) // 新节点入列
  } else { // 插入非根节点
    let parent = this.queue[0] // 被插入的父节点
    if (!(this.insertNum % 2)) { // 通过插入次数判断左右
      parent.left = node // 插入左边
      this.queue.push(parent.left) // 新节点入列
    } else {
      parent.right = node // 插入右边
      this.queue.push(parent.right) // 新节点入列
      this.queue.shift() // 当前父节点parent 已经不可能再插入子节点,故出列
    }
  }
  return this
}

let binaryTree = new BinaryTree()
binaryTree.insert('A')
  .insert('B')
  .insert('C')
  .insert('D')
  .insert('E')
  .insert('F')

console.log(JSON.stringify(binaryTree.root, null, 4))

皇家娱乐官网 7

output.png

在SQL Server 中插入一条数据采用Insert语句,但是假若想要批量插入一群数据来讲,循环利用Insert不止效能低,而且会招致SQL一系统性格难点。下边介绍SQL Server辅助的三种批量数目插入方法:Bulk和表值参数(Table-Valued Parameters),高效插入数据。

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:【皇家娱乐官网】二叉树中节点的顺序插入,往

关键词: 68399皇家赌场 mysql DBI Perl 笔记

上一篇:An Easier Way of Command Pattern

下一篇:没有了

最火资讯