Skip to content

Commit 682637f

Browse files
authored
tpcc: set clustered_index as optional (#197)
1 parent 4094c7d commit 682637f

File tree

5 files changed

+115
-104
lines changed

5 files changed

+115
-104
lines changed

cmd/go-tpc/tpcc.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ func registerTpcc(root *cobra.Command) {
105105
}
106106
cmdPrepare.PersistentFlags().BoolVar(&tpccConfig.NoCheck, "no-check", false, "TPCC prepare check, default false")
107107
cmdPrepare.PersistentFlags().BoolVar(&tpccConfig.UseFK, "use-fk", false, "TPCC using foreign key, default false")
108+
cmdPrepare.PersistentFlags().BoolVar(&tpccConfig.UseClusteredIndex, "use-clustered-index", true, "TPCC use clustered index, default true")
108109
cmdPrepare.PersistentFlags().StringVar(&tpccConfig.OutputType, "output-type", "", "Output file type."+
109110
" If empty, then load data to db. Current only support csv")
110111
cmdPrepare.PersistentFlags().StringVar(&tpccConfig.OutputDir, "output-dir", "", "Output directory for generating file if specified")

tpcc/csv.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func NewCSVWorkloader(db *sql.DB, cfg *Config) (*CSVWorkLoader, error) {
4242
cfg: cfg,
4343
initLoadTime: time.Now().Format(timeFormat),
4444
tables: make(map[string]bool),
45-
ddlManager: newDDLManager(cfg.Parts, cfg.UseFK, cfg.Warehouses, cfg.PartitionType),
45+
ddlManager: newDDLManager(cfg.Parts, cfg.UseFK, cfg.Warehouses, cfg.PartitionType, cfg.UseClusteredIndex),
4646
}
4747

4848
var val bool

tpcc/ddl.go

Lines changed: 99 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ const (
1818
)
1919

2020
type ddlManager struct {
21-
parts int
22-
warehouses int
23-
partitionType int
24-
useFK bool
21+
parts int
22+
warehouses int
23+
partitionType int
24+
useFK bool
25+
useClusteredIndex bool
2526
}
2627

27-
func newDDLManager(parts int, useFK bool, warehouses, partitionType int) *ddlManager {
28-
return &ddlManager{parts: parts, useFK: useFK, warehouses: warehouses, partitionType: partitionType}
28+
func newDDLManager(parts int, useFK bool, warehouses, partitionType int, useClusteredIndex bool) *ddlManager {
29+
return &ddlManager{parts: parts, useFK: useFK, warehouses: warehouses, partitionType: partitionType, useClusteredIndex: useClusteredIndex}
2930
}
3031

3132
func (w *ddlManager) createTableDDL(ctx context.Context, query string, tableName string) error {
@@ -123,8 +124,16 @@ func (w *ddlManager) appendPartition(query string, partKeys string) string {
123124
// createTables creates tables schema.
124125
func (w *ddlManager) createTables(ctx context.Context, driver string) error {
125126
if driver == "mysql" {
127+
128+
var clusteredIndexType string
129+
if w.useClusteredIndex {
130+
clusteredIndexType = "CLUSTERED"
131+
} else {
132+
clusteredIndexType = "NONCLUSTERED"
133+
}
134+
126135
// Warehouse
127-
query := `
136+
query := fmt.Sprintf(`
128137
CREATE TABLE IF NOT EXISTS warehouse (
129138
w_id INT NOT NULL,
130139
w_name VARCHAR(10),
@@ -135,8 +144,8 @@ CREATE TABLE IF NOT EXISTS warehouse (
135144
w_zip CHAR(9),
136145
w_tax DECIMAL(4, 4),
137146
w_ytd DECIMAL(12, 2),
138-
PRIMARY KEY (w_id) /*T![clustered_index] CLUSTERED */
139-
)`
147+
PRIMARY KEY (w_id) /*T![clustered_index] %s */
148+
)`, clusteredIndexType)
140149

141150
query = w.appendPartition(query, "w_id")
142151

@@ -145,7 +154,7 @@ CREATE TABLE IF NOT EXISTS warehouse (
145154
}
146155

147156
// District
148-
query = `
157+
query = fmt.Sprintf(`
149158
CREATE TABLE IF NOT EXISTS district (
150159
d_id INT NOT NULL,
151160
d_w_id INT NOT NULL,
@@ -158,8 +167,8 @@ CREATE TABLE IF NOT EXISTS district (
158167
d_tax DECIMAL(4, 4),
159168
d_ytd DECIMAL(12, 2),
160169
d_next_o_id INT,
161-
PRIMARY KEY (d_w_id, d_id) /*T![clustered_index] CLUSTERED */
162-
)`
170+
PRIMARY KEY (d_w_id, d_id) /*T![clustered_index] %s */
171+
)`, clusteredIndexType)
163172

164173
query = w.appendPartition(query, "d_w_id")
165174

@@ -168,32 +177,32 @@ CREATE TABLE IF NOT EXISTS district (
168177
}
169178

170179
// Customer
171-
query = `
180+
query = fmt.Sprintf(`
172181
CREATE TABLE IF NOT EXISTS customer (
173-
c_id INT NOT NULL,
182+
c_id INT NOT NULL,
174183
c_d_id INT NOT NULL,
175-
c_w_id INT NOT NULL,
176-
c_first VARCHAR(16),
177-
c_middle CHAR(2),
178-
c_last VARCHAR(16),
179-
c_street_1 VARCHAR(20),
180-
c_street_2 VARCHAR(20),
181-
c_city VARCHAR(20),
182-
c_state CHAR(2),
183-
c_zip CHAR(9),
184-
c_phone CHAR(16),
185-
c_since DATETIME,
186-
c_credit CHAR(2),
187-
c_credit_lim DECIMAL(12, 2),
188-
c_discount DECIMAL(4,4),
189-
c_balance DECIMAL(12,2),
190-
c_ytd_payment DECIMAL(12,2),
191-
c_payment_cnt INT,
192-
c_delivery_cnt INT,
184+
c_w_id INT NOT NULL,
185+
c_first VARCHAR(16),
186+
c_middle CHAR(2),
187+
c_last VARCHAR(16),
188+
c_street_1 VARCHAR(20),
189+
c_street_2 VARCHAR(20),
190+
c_city VARCHAR(20),
191+
c_state CHAR(2),
192+
c_zip CHAR(9),
193+
c_phone CHAR(16),
194+
c_since DATETIME,
195+
c_credit CHAR(2),
196+
c_credit_lim DECIMAL(12, 2),
197+
c_discount DECIMAL(4,4),
198+
c_balance DECIMAL(12,2),
199+
c_ytd_payment DECIMAL(12,2),
200+
c_payment_cnt INT,
201+
c_delivery_cnt INT,
193202
c_data VARCHAR(500),
194-
PRIMARY KEY(c_w_id, c_d_id, c_id) /*T![clustered_index] CLUSTERED */,
203+
PRIMARY KEY(c_w_id, c_d_id, c_id) /*T![clustered_index] %s */,
195204
INDEX idx_customer (c_w_id, c_d_id, c_last, c_first)
196-
)`
205+
)`, clusteredIndexType)
197206

198207
query = w.appendPartition(query, "c_w_id")
199208

@@ -221,21 +230,21 @@ CREATE TABLE IF NOT EXISTS history (
221230
return err
222231
}
223232

224-
query = `
233+
query = fmt.Sprintf(`
225234
CREATE TABLE IF NOT EXISTS new_order (
226235
no_o_id INT NOT NULL,
227236
no_d_id INT NOT NULL,
228237
no_w_id INT NOT NULL,
229-
PRIMARY KEY(no_w_id, no_d_id, no_o_id) /*T![clustered_index] CLUSTERED */
230-
)`
238+
PRIMARY KEY(no_w_id, no_d_id, no_o_id) /*T![clustered_index] %s */
239+
)`, clusteredIndexType)
231240

232241
query = w.appendPartition(query, "no_w_id")
233242
if err := w.createTableDDL(ctx, query, tableNewOrder); err != nil {
234243
return err
235244
}
236245

237246
// because order is a keyword, so here we use orders instead
238-
query = `
247+
query = fmt.Sprintf(`
239248
CREATE TABLE IF NOT EXISTS orders (
240249
o_id INT NOT NULL,
241250
o_d_id INT NOT NULL,
@@ -245,16 +254,16 @@ CREATE TABLE IF NOT EXISTS orders (
245254
o_carrier_id INT,
246255
o_ol_cnt INT,
247256
o_all_local INT,
248-
PRIMARY KEY(o_w_id, o_d_id, o_id) /*T![clustered_index] CLUSTERED */,
257+
PRIMARY KEY(o_w_id, o_d_id, o_id) /*T![clustered_index] %s */,
249258
INDEX idx_order (o_w_id, o_d_id, o_c_id, o_id)
250-
)`
259+
)`, clusteredIndexType)
251260

252261
query = w.appendPartition(query, "o_w_id")
253262
if err := w.createTableDDL(ctx, query, tableOrders); err != nil {
254263
return err
255264
}
256265

257-
query = `
266+
query = fmt.Sprintf(`
258267
CREATE TABLE IF NOT EXISTS order_line (
259268
ol_o_id INT NOT NULL,
260269
ol_d_id INT NOT NULL,
@@ -266,57 +275,57 @@ CREATE TABLE IF NOT EXISTS orders (
266275
ol_quantity INT,
267276
ol_amount DECIMAL(6, 2),
268277
ol_dist_info CHAR(24),
269-
PRIMARY KEY(ol_w_id, ol_d_id, ol_o_id, ol_number) /*T![clustered_index] CLUSTERED */
270-
)`
278+
PRIMARY KEY(ol_w_id, ol_d_id, ol_o_id, ol_number) /*T![clustered_index] %s */
279+
)`, clusteredIndexType)
271280

272281
query = w.appendPartition(query, "ol_w_id")
273282
if err := w.createTableDDL(ctx, query, tableOrderLine); err != nil {
274283
return err
275284
}
276285

277-
query = `
286+
query = fmt.Sprintf(`
278287
CREATE TABLE IF NOT EXISTS stock (
279288
s_i_id INT NOT NULL,
280289
s_w_id INT NOT NULL,
281290
s_quantity INT,
282-
s_dist_01 CHAR(24),
291+
s_dist_01 CHAR(24),
283292
s_dist_02 CHAR(24),
284293
s_dist_03 CHAR(24),
285-
s_dist_04 CHAR(24),
286-
s_dist_05 CHAR(24),
287-
s_dist_06 CHAR(24),
288-
s_dist_07 CHAR(24),
289-
s_dist_08 CHAR(24),
290-
s_dist_09 CHAR(24),
291-
s_dist_10 CHAR(24),
292-
s_ytd INT,
293-
s_order_cnt INT,
294+
s_dist_04 CHAR(24),
295+
s_dist_05 CHAR(24),
296+
s_dist_06 CHAR(24),
297+
s_dist_07 CHAR(24),
298+
s_dist_08 CHAR(24),
299+
s_dist_09 CHAR(24),
300+
s_dist_10 CHAR(24),
301+
s_ytd INT,
302+
s_order_cnt INT,
294303
s_remote_cnt INT,
295304
s_data VARCHAR(50),
296-
PRIMARY KEY(s_w_id, s_i_id) /*T![clustered_index] CLUSTERED */
297-
)`
305+
PRIMARY KEY(s_w_id, s_i_id) /*T![clustered_index] %s */
306+
)`, clusteredIndexType)
298307

299308
query = w.appendPartition(query, "s_w_id")
300309
if err := w.createTableDDL(ctx, query, tableStock); err != nil {
301310
return err
302311
}
303312

304-
query = `
313+
query = fmt.Sprintf(`
305314
CREATE TABLE IF NOT EXISTS item (
306315
i_id INT NOT NULL,
307316
i_im_id INT,
308317
i_name VARCHAR(24),
309318
i_price DECIMAL(5, 2),
310319
i_data VARCHAR(50),
311-
PRIMARY KEY(i_id) /*T![clustered_index] CLUSTERED */
312-
)`
320+
PRIMARY KEY(i_id) /*T![clustered_index] %s */
321+
)`, clusteredIndexType)
313322

314323
if err := w.createTableDDL(ctx, query, tableItem); err != nil {
315324
return err
316325
}
317326

318327
if w.useFK {
319-
query = `
328+
query = `
320329
alter table district add constraint d_warehouse_fkey
321330
foreign key (d_w_id)
322331
references warehouse (w_id)`
@@ -446,26 +455,26 @@ CREATE TABLE IF NOT EXISTS district (
446455
// Customer
447456
query = `
448457
CREATE TABLE IF NOT EXISTS customer (
449-
c_id INT NOT NULL,
458+
c_id INT NOT NULL,
450459
c_d_id INT NOT NULL,
451-
c_w_id INT NOT NULL,
452-
c_first VARCHAR(16),
453-
c_middle CHAR(2),
454-
c_last VARCHAR(16),
455-
c_street_1 VARCHAR(20),
456-
c_street_2 VARCHAR(20),
457-
c_city VARCHAR(20),
458-
c_state CHAR(2),
459-
c_zip CHAR(9),
460-
c_phone CHAR(16),
461-
c_since TIMESTAMP,
462-
c_credit CHAR(2),
463-
c_credit_lim DECIMAL(12, 2),
464-
c_discount DECIMAL(4,4),
465-
c_balance DECIMAL(12,2),
466-
c_ytd_payment DECIMAL(12,2),
467-
c_payment_cnt INT,
468-
c_delivery_cnt INT,
460+
c_w_id INT NOT NULL,
461+
c_first VARCHAR(16),
462+
c_middle CHAR(2),
463+
c_last VARCHAR(16),
464+
c_street_1 VARCHAR(20),
465+
c_street_2 VARCHAR(20),
466+
c_city VARCHAR(20),
467+
c_state CHAR(2),
468+
c_zip CHAR(9),
469+
c_phone CHAR(16),
470+
c_since TIMESTAMP,
471+
c_credit CHAR(2),
472+
c_credit_lim DECIMAL(12, 2),
473+
c_discount DECIMAL(4,4),
474+
c_balance DECIMAL(12,2),
475+
c_ytd_payment DECIMAL(12,2),
476+
c_payment_cnt INT,
477+
c_delivery_cnt INT,
469478
c_data VARCHAR(500),
470479
PRIMARY KEY(c_w_id, c_d_id, c_id)
471480
)`
@@ -557,18 +566,18 @@ CREATE TABLE IF NOT EXISTS stock (
557566
s_i_id INT NOT NULL,
558567
s_w_id INT NOT NULL,
559568
s_quantity INT,
560-
s_dist_01 CHAR(24),
569+
s_dist_01 CHAR(24),
561570
s_dist_02 CHAR(24),
562571
s_dist_03 CHAR(24),
563-
s_dist_04 CHAR(24),
564-
s_dist_05 CHAR(24),
565-
s_dist_06 CHAR(24),
566-
s_dist_07 CHAR(24),
567-
s_dist_08 CHAR(24),
568-
s_dist_09 CHAR(24),
569-
s_dist_10 CHAR(24),
570-
s_ytd INT,
571-
s_order_cnt INT,
572+
s_dist_04 CHAR(24),
573+
s_dist_05 CHAR(24),
574+
s_dist_06 CHAR(24),
575+
s_dist_07 CHAR(24),
576+
s_dist_08 CHAR(24),
577+
s_dist_09 CHAR(24),
578+
s_dist_10 CHAR(24),
579+
s_ytd INT,
580+
s_order_cnt INT,
572581
s_remote_cnt INT,
573582
s_data VARCHAR(50),
574583
PRIMARY KEY(s_w_id, s_i_id)
@@ -592,7 +601,7 @@ CREATE TABLE IF NOT EXISTS item (
592601
}
593602

594603
if w.useFK {
595-
query = `
604+
query = `
596605
alter table district add constraint d_warehouse_fkey
597606
foreign key (d_w_id)
598607
references warehouse (w_id)`

0 commit comments

Comments
 (0)