Categories
code hacks

SQL query execution order

Since going back from Mongo/NoSQL to MySQL, I keep rediscovering the execution order of SQL query.  

Inside Microsoft® SQL Server™ 2005 T-SQL Querying

(8)  SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1)  FROM <left_table>
(3)       <join_type> JOIN <right_table>
(2)       ON <join_condition>
(4)  WHERE <where_condition>
(5)  GROUP BY <group_by_list>
(6)  WITH {CUBE | ROLLUP}
(7)  HAVING <having_condition>
(10) ORDER BY <order_by_list>

The first noticeable aspect of SQL that is different than other programming languages is the order in which the code is processed. In most programming languages, the code is processed in the order in which it is written. In SQL, the first clause that is processed is the FROM clause, while the SELECT clause, which appears first, is processed almost last.

Each step generates a virtual table that is used as the input to the following step. These virtual tables are not available to the caller (client application or outer query). Only the table generated by the final step is returned to the caller. If a certain clause is not specified in a query, the corresponding step is simply skipped.

Brief Description of Logical Query Processing Phases

Don’t worry too much if the description of the steps doesn’t seem to make much sense for now. These are provided as a reference. Sections that come after the scenario example will cover the steps in much more detail.

  1. FROM: A Cartesian product (cross join) is performed between the first two tables in the FROM clause, and as a result, virtual table VT1 is generated.
  2. ON: The ON filter is applied to VT1. Only rows for which the <join_condition> is TRUE are inserted to VT2.
  3. OUTER (join): If an OUTER JOIN is specified (as opposed to a CROSS JOIN or an INNER JOIN), rows from the preserved table or tables for which a match was not found are added to the rows from VT2 as outer rows, generating VT3. If more than two tables appear in the FROM clause, steps 1 through 3 are applied repeatedly between the result of the last join and the next table in the FROM clause until all tables are processed.
  4. WHERE: The WHERE filter is applied to VT3. Only rows for which the <where_condition> is TRUE are inserted to VT4.
  5. GROUP BY: The rows from VT4 are arranged in groups based on the column list specified in the GROUP BY clause. VT5 is generated.
  6. CUBE | ROLLUP: Supergroups (groups of groups) are added to the rows from VT5, generating VT6.
  7. HAVING: The HAVING filter is applied to VT6. Only groups for which the <having_condition> is TRUE are inserted to VT7.
  8. SELECT: The SELECT list is processed, generating VT8.
  9. DISTINCT: Duplicate rows are removed from VT8. VT9 is generated.
  10. ORDER BY: The rows from VT9 are sorted according to the column list specified in the ORDER BY clause. A cursor is generated (VC10).
  11. TOP: The specified number or percentage of rows is selected from the beginning of VC10. Table VT11 is generated and returned to the caller.

Therefore, (INNER JOIN) ON will filter the data (the data count of VT will be reduced here itself) before applying WHERE clause. The subsequent join conditions will be executed with filtered data which improves performance. After that only the WHERE condition will apply filter conditions.

(Applying conditional statements in ON / WHERE will not make much difference in few cases. This depends how many tables you have joined and number of rows available in each join tables)

Categories
conversational UX / AI

What is Conversational UX?

Conversation UX needs to blend people and chatbots delivering dialogue for personalised interaction.

Users want answers and great experience. Conversational UX allows us to escape rigidity of webforms and create UX around specific customer needs.

Categories
hacks leadership people process startup strategy

Lessons Learned Running Tech Consultancy

Needless to say that advice here is relevant in 2018 as it was in 2012:

  • Everyone starts on fulltime salary
  • Process is very important
  • Not a fan of remote working setup (I agree 100% unless it gives scale and capability hard to hire locally)
  • Business development ways:
    • Writing blog posts
    • Giving presentations to general tech audiences (more beginners than experts)
    • LinkedIn
    • Referrals
    • Being found on Google
Categories
AI venture capital

SFO VC valuation

I spent a week in SFO following my wife who has a Dev team here. At a meetup about ML using AWS SageMaker I heard: One GitHub star is worth 15,000 dollars to your start up valuation.

Categories
AI Slack

Platform with 6m ADU

Butter.ai launched on Slack giving it instant access to a market as well ability to offer chat UX meaning they had lass to build to enter a market. Slack invested in Butter.

Categories
AI

What is AI?

At a San Francisco AI meetup I heard: AI is what you sell to customers and Machine Learning is what you say you do to hire.

 

 

Categories
behaviour

Nudge to go live

Interesting to learn again how even small changes test organisations. Launching a simple website lets you find out about your team mates, priorities, yourself.

Categories
book hacks leadership strategy

Reading: Good Strategy / Bad Strategy by Richard Rumelt

Bed bound for the last 2 days and when not reviewing PRs I read Good Strategy / Bad Strategy book from 2011 FT short list, and I am starting to realise that I don’t now what our strategy is.

Could it be that I wasn’t paying attention? Or we need to work this out? I reviewed a few series A pitch decks and clearly many haven’t worked what their strategy is.

Some ideas from the book can be found on slides here.

Categories
behaviour Google people team

High performance teams – what Google learnt

The NY Times article says: Project Aristotle’s researchers began searching through the data they had collected, looking for norms. They looked for instances when team members described a particular behavior as an ‘‘unwritten rule’’ or when they explained certain things as part of the ‘‘team’s culture.’’ Some groups said that teammates interrupted one another constantly and that team leaders reinforced that behavior by interrupting others themselves. On other teams, leaders enforced conversational order, and when someone cut off a teammate, group members would politely ask everyone to wait his or her turn. Some teams celebrated birthdays and began each meeting with informal chitchat about weekend plans. Other groups got right to business and discouraged gossip. There were teams that contained outsize personalities who hewed to their group’s sedate norms, and others in which introverts came out of their shells as soon as meetings began.

After looking at over a hundred groups for more than a year, Project Aristotle researchers concluded that understanding and influencing group norms were the keys to improving Google’s teams.

Categories
code design

NodeJS best practice

Hard to disagree with this collection of valuable insights. Keep coming back to it https://github.com/i0natan/nodebestpractices