Files
sql-server-samples/samples/tutorials/AzureSqlGettingStartedSamples/ruby/AzureSqlColumnstoreSample/columnstore.rb
T
akatesmith 50468c14d3 adding azure sql samples
Adding the samples content from extending the getting started website for azure specific workflows
2020-09-15 12:20:56 -07:00

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