mirror of
https://github.com/Microsoft/sql-server-samples.git
synced 2025-12-08 14:58:54 +00:00
53 lines
2.0 KiB
Ruby
53 lines
2.0 KiB
Ruby
require 'tiny_tds'
|
|
@client = TinyTds::Client.new username: 'your_user@your_server', password: 'your_password',
|
|
dataserver: 'your_server.database.windows.net', database: 'your_database', azure: true, timeout: 600
|
|
|
|
|
|
# Calculate time difference in milliseconds
|
|
def time_diff_milli(start, finish)
|
|
((finish - start) * 1000).floor
|
|
end
|
|
|
|
def execute(sql)
|
|
@client.execute(sql).do
|
|
true
|
|
end
|
|
|
|
# Ensure the table doesn't already exist.
|
|
puts "Drop the table if it exists"
|
|
execute("Drop table if exists Table_with_3M_rows")
|
|
|
|
# Insert 3 million rows into the table 'Table_with_3M_rows'
|
|
puts "Inserting 3 million rows into table 'Table_with_3M_rows'. This takes ~1 minute, please wait."
|
|
execute("WITH a AS (SELECT * FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) AS a(a))
|
|
SELECT TOP(3000000)
|
|
ROW_NUMBER() OVER (ORDER BY a.a) AS OrderItemId
|
|
,a.a + b.a + c.a + d.a + e.a + f.a + g.a + h.a AS OrderId
|
|
,a.a * 10 AS Price
|
|
,CONCAT(a.a, N' ', b.a, N' ', c.a, N' ', d.a, N' ', e.a, N' ', f.a, N' ', g.a, N' ', h.a) AS ProductName
|
|
INTO Table_with_3M_rows
|
|
FROM a, a AS b, a AS c, a AS d, a AS e, a AS f, a AS g, a AS h;")
|
|
|
|
# Execute query without columnstore index
|
|
t1 = Time.now
|
|
execute("SELECT SUM(Price) as sum FROM Table_with_3M_rows")
|
|
t2 = Time.now
|
|
elapsedTimeWithoutIndex = time_diff_milli t1, t2
|
|
puts "Query time without columnstore index: #{elapsedTimeWithoutIndex}ms"
|
|
|
|
# Create columnnstore index on table 'Table_with_3M_rows'
|
|
puts("Adding a columnstore index to table 'Table_with_3M_rows'")
|
|
execute("CREATE CLUSTERED COLUMNSTORE INDEX columnstoreindex ON Table_with_3M_rows;")
|
|
|
|
# Execute the same query with columnstore index
|
|
t3 = Time.now
|
|
execute("SELECT SUM(Price) as sum FROM Table_with_3M_rows")
|
|
t4 = Time.now
|
|
elapsedTimeWithIndex = time_diff_milli t3, t4
|
|
puts "Query time WITH columnstore index: #{elapsedTimeWithIndex}ms"
|
|
|
|
# Calculate performance improvement with columnstore index
|
|
perf_improvement = (elapsedTimeWithoutIndex / elapsedTimeWithIndex).floor
|
|
puts "Performance improvement with columnstore index: #{perf_improvement}x!"
|
|
|
|
@client.close |