|
|
@@ -191,11 +191,13 @@ func TestSQLiteProfmance(t *testing.T) {
|
|
|
if err != nil {
|
|
|
println("err", fmt.Sprint(err))
|
|
|
}
|
|
|
+ updatefields := "name=?,value=?,desc=?"
|
|
|
fields := "id,name,value,desc"
|
|
|
askmarks := "?,?,?,?"
|
|
|
for i := 1; i <= varfieldscount; i++ {
|
|
|
fields += ",var" + strconv.Itoa(i)
|
|
|
askmarks += ",?"
|
|
|
+ updatefields += ",var" + strconv.Itoa(i) + "=?"
|
|
|
}
|
|
|
allfields := fields
|
|
|
for i := varfieldscount + 1; i <= varfieldscount+emptyfieldscount; i++ {
|
|
|
@@ -343,6 +345,7 @@ func TestSQLiteProfmance(t *testing.T) {
|
|
|
}
|
|
|
tx.Commit()
|
|
|
println("sqlite insert with transaction ", len(data), " use time ", time.Since(st).String())
|
|
|
+
|
|
|
st = time.Now()
|
|
|
stmt, err = mdb.Prepare("insert into test(" + fields + ") values(" + askmarks + ")")
|
|
|
if err != nil {
|
|
|
@@ -404,6 +407,65 @@ func TestSQLiteProfmance(t *testing.T) {
|
|
|
// }
|
|
|
}
|
|
|
println("sqlite insert immediately ", len(data), " use time ", time.Since(st).String())
|
|
|
+
|
|
|
+ st = time.Now()
|
|
|
+ upsertSql := `BEGIN TRANSACTION;
|
|
|
+DELETE FROM test WHERE id=?;
|
|
|
+INSERT INTO test (` + fields + `) VALUES (` + askmarks + `);
|
|
|
+COMMIT;`
|
|
|
+ upsertstmt, err := mdb.Prepare(upsertSql)
|
|
|
+ if err != nil {
|
|
|
+ println("err", fmt.Sprint(err))
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, d := range data {
|
|
|
+ args := []interface{}{
|
|
|
+ d["id"],
|
|
|
+ d["id"],
|
|
|
+ d["name"],
|
|
|
+ d["value"],
|
|
|
+ d["desc"]}
|
|
|
+ for vi := 1; vi <= varfieldscount; vi++ {
|
|
|
+ args = append(args, d["var"+strconv.Itoa(vi)])
|
|
|
+ }
|
|
|
+ rslt, err = upsertstmt.Exec(args...)
|
|
|
+ if err != nil {
|
|
|
+ println("err", fmt.Sprint(err))
|
|
|
+ }
|
|
|
+ // println("rslt", fmt.Sprint(rslt.LastInsertId()), fmt.Sprint(rslt.RowsAffected()))
|
|
|
+ // if (i+1)%10000 == 0 {
|
|
|
+ // println("sqlite insert ", (i + 1), " use time ", time.Since(st).String())
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ println("sqlite upsert(del+insert) immediately prepare ", len(data), " use time ", time.Since(st).String())
|
|
|
+
|
|
|
+ st = time.Now()
|
|
|
+ updateSql := `UPDATE test SET ` + updatefields + ` WHERE id=?`
|
|
|
+ updatestmt, err := mdb.Prepare(updateSql)
|
|
|
+ if err != nil {
|
|
|
+ println("err", fmt.Sprint(err))
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, d := range data {
|
|
|
+ args := []interface{}{
|
|
|
+ d["name"],
|
|
|
+ d["value"],
|
|
|
+ d["desc"]}
|
|
|
+ for vi := 1; vi <= varfieldscount; vi++ {
|
|
|
+ args = append(args, d["var"+strconv.Itoa(vi)])
|
|
|
+ }
|
|
|
+ args = append(args, d["id"])
|
|
|
+ rslt, err = updatestmt.Exec(args...)
|
|
|
+ if err != nil {
|
|
|
+ println("err", fmt.Sprint(err))
|
|
|
+ }
|
|
|
+ // println("rslt", fmt.Sprint(rslt.LastInsertId()), fmt.Sprint(rslt.RowsAffected()))
|
|
|
+ // if (i+1)%10000 == 0 {
|
|
|
+ // println("sqlite insert ", (i + 1), " use time ", time.Since(st).String())
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ println("sqlite update immediately prepare ", len(data), " use time ", time.Since(st).String())
|
|
|
+
|
|
|
st = time.Now()
|
|
|
stmt, err = mdb.Prepare("select * from test")
|
|
|
if err != nil {
|