<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Denis Gobo : SQL Server</title><link>http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx</link><description>Tags: SQL Server</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Interview With Erland Sommarskog About SQL Server and Transact SQL</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2008/05/27/6997.aspx</link><pubDate>Tue, 27 May 2008 14:09:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:6997</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/6997.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=6997</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=6997</wfw:comment><description>&lt;P&gt;I asked&amp;nbsp;for some names of people who you would like to see interviewed here at Sqlblog and Erland Sommarskog's name popped up a couple of times. I contacted Erland and he was kind enough to take time out from his busy schedule to answer these questions.&amp;nbsp;&amp;nbsp;So, here are the questions.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What are the most important things a person can do to master SQL Server?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;That is a very difficult question, because SQL Server is such a vast product.&lt;/P&gt;
&lt;P&gt;What do you aim at? Being an infrastructure DBA that builds clusters and sets up replication, but don't know much about the business? Or do you want to do database design and work closely to the business analysts? Do you want to be a performance specialist? Or be a good SQL programmer? What sort of applications do you want to work with? OLTP? OLAP? Maybe you want to be in the ETL trade and work a lot with Integration Services? Or do you want to be a Reporting Services developer?&lt;/P&gt;
&lt;P&gt;It goes without saying that depending on what you aim at, the exact answer will be different. If you want to be an infrastructure DBA, you need to get a very good understanding of RAIDs, SANs and all that, but for other roles this is of less interest.&lt;/P&gt;
&lt;P&gt;Nevertheless, there are still some commons: whatever you aim at, you need experience. You can read books, you can attend classes and they can help you enter the next level. But it is through hands-on experience you learn. And not at least you learn from your own mistakes.&lt;/P&gt;
&lt;P&gt;In terms of reading, there is one source that I like to highlight as better than many other: follow a public forum in the area you are interested in. You will see questions, and hopefully good answers to the questions. And sometimes you may be able to contribute with an answer yourself. What is great with the newsgroups is that questions reappears. As they say: repetition is the mother of all learning. If you read a book or a blogpost, your memory fades after a while. But if you see the same answer reoccurring, one day not only will you be able to answer the question yourself, but also use it for your own work.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What are the most important things a person can do to master Transact-SQL?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Obviously, you need learn think in sets, and resist the temptations to solve problems in loops. This can indeed be a challenge. I have recent years rewritten procedures that originally were designed for one at a time, and in some cases it was quite an undertaking. The reward at the end of the rainbow was vastly increased performance for big volumes.&lt;/P&gt;
&lt;P&gt;You also need to get a very good understanding of indexing, and when an index is useful or not. This is because this has such a big impact on performance.&lt;/P&gt;
&lt;P&gt;But more exactly how do you learn this well? Let me return to what I said above: Experience. When you have query that seems to work, don't stop there. What happens if you change that part of the query? What happens if you add that row that holds some funky data? How does the query plan look like? Does it use an index? If it doesn't, why not?&lt;/P&gt;
&lt;P&gt;When it comes to understanding indexing and query plans, I have a tip: imagine that you had the data on a bunch of record cards, and you needed to traverse it yourself to find the desired data. How would you do this effectively?&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What SQL Server books are on your bookshelf?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;My time to read books is fairly limited. Mainly I read books when I'm travelling, and when I go basking lakeside in summer. So I don't go buying books by the dozen. And least of all SQL Books, I do like reading about other topics too.&lt;/P&gt;
&lt;P&gt;But I have the Inside SQL Server 2005 series, which I definitely recommend for anyone who has some experience of SQL Server and want to raise to a higher level. Itzik's two books learn you some very valuable query techniques, and Kalen's two books give you a deeper look into the internals and query-tuning techniques. (Actually, I'm only on chapter 3 of the last book, but what I've seen this far looks promising.)&lt;/P&gt;
&lt;P&gt;I have a few more titles; of which several hitherto are unread I will have to admit. The SQL Server-related book I return to the most often is the OLE DB Reference Manual, would you believe it.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Erland, the first time I came across your name was in the Microsoft public SQL Server programming group. Can you explain to us why you participate in newsgroups and forums?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;I started to participate on Usenet groups when I got access to Usenet with my first job in the mid-eighties. In the beginning it was mainly for leisure, including the technical groups I followed. By time I became very active, and a search on Google news will reveal posts in newsgroups about music, linguistics, politics and Usenet itself.&lt;/P&gt;
&lt;P&gt;All the time, I subscribed to technical newsgroups that related to what I was working with. So I subscribed to comp.databases.sybase when I worked with Sybase, and when I moved on to MS SQL Server I went over to comp.databases.ms-sqlserver. The idea was simple: ask a question when I needed help, and if there was a question to which I knew the answer, I answered it. And in between that I learnt things from other people's posts and answers.&lt;/P&gt;
&lt;P&gt;At some point I found that I answered far more questions than I asked, and when I asked a question, I did not always get an answer any more. I also realized that the traffic was a bit low, and one I summer I started to visit microsoft.public.sqlserver.programming to find where the real action was going on.&lt;/P&gt;
&lt;P&gt;These days I only follow SQL Server newsgroups with one exception, rec.games.trivia. And this is definitely the best era in my Usenet career. I help people, and the tone in newsgroups I follow is generally polite. Every once in a while I can feel that I answer the same questions, but it's still rewarding to know that I have been able to help someone. Not only with his urgent problem, but, I hope, he or she has also learnt something for the future. And every once there is a challenging problem from which I can learn myself.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Why do you have a site, why did you not write a book instead?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;There are a couple of reasons. One is that I originally wrote these articles so that I could refer to them in my posts, rather than having to type the same thing over and over again. I could never dream of answering people by suggesting them to pay money to get the answer.&lt;/P&gt;
&lt;P&gt;Another is that once a book is printed, it's printed. If there is an error, an omission, or I simply make new revelations on the topic, I cannot magically update all copies out there. That is easier to do on a web site.&lt;/P&gt;
&lt;P&gt;Finally, there is a general feeling that a web site is more low key. Since no one pays for anything, I can produce articles in the pace I like, and I can permit myself to keep down the level of ambition a bit.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Which article was the hardest to write and can you explain why?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;I think the article I have spent the most time on is the one on Arrays and Lists. With the performance appendix, this is by far the longest article, and one problem was that people kept suggesting me new methods all the time. Of which some were very good. (These days, I review all new ideas fairly critically, and it has to be really innovative to make the article. It's already long enough.) Add to this it takes some time to run all those performance tests and evaluate them.&lt;/P&gt;
&lt;P&gt;But I think the most difficult to write was the one on error handling. It's definitely the most difficult to revise for SQL 2005, which is testified by the fact that I haven't started yet. One reason that error handling in SQL Server is so difficult to write about is that it is so inconsistent. TRY-CATCH has made this easier, but to understand the fine details, you still need to learn about statement-aborting errors, batch-aborting errors and all that jazz.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What is the most popular article on your site?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;That seems to be "The Curse and Blessings of Dynamic SQL".&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What new technologies in SQL Server 2005 do you think are the most beneficial for performance?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The row_number() function! It may seem like a simple thing, but there are so many problems that can be solved more efficiently with row_number(). Now, if Microsoft &amp;nbsp;would only implement the missing parts of the OVER() clause!&lt;/P&gt;
&lt;P&gt;Statement recompile is also very important. In SQL 2000, I often faced problems with long stored procedures that were recompiled several times during a single execution. That damage is recuded considerably with statement recompile.&lt;/P&gt;
&lt;P&gt;Snapshot isolation is also a valuable addition, although it's not always the right thing. I recently learnt that as long as snapshot isolation (including read committed snapshot) is enabled, SQL Server adds 14 bytes of overhead to each row. But as snapshot isolation can reduce blocking considerably, it can still be worthwhile for some applications.&lt;/P&gt;
&lt;P&gt;I guess it's inevitable to mention plan guides. This is a feature that I have stayed away from myself, as I feel that it is a truly advanced feature. But as a last resort it is very valuable that it's available.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What new technologies in SQL Server 2008 do you think are the most beneficial for performance?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The MERGE statement makes it possible to replace combinations of INSERT WHERE NOT EXISTS and UPDATE with a single statement. A very valuable addition.&lt;/P&gt;
&lt;P&gt;There are various new features to make tables smaller: table/index compression, sparse columns and filtered indexes. They can improve your performance if you use them correctly.&lt;/P&gt;
&lt;P&gt;This is not really my area, but I believe that the fact that full-text is now a first-class SQL Server citizen, will be very beneficial for full-text applications.&lt;/P&gt;
&lt;P&gt;I like to add for both these questions I have made my choices for things that are in my realm. Improved star-schema join is probably a great thing, but as I am not into data warehousing, this is not a feature that I can evaluate.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Name three things that are new in SQL Server 2005 that you find are the most valuable for developers?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Two features stand out ahead of everything else: TRY-CATCH and the row_number() function. Error handling that was very complicated and tiresome in SQL 2000 is now significantly easier. And there are so many problems that are a lot easier to solve with help of row_number().&lt;/P&gt;
&lt;P&gt;Beside these two, there were many valuable additions to SQL 2005, and picking just one ahead of the other is difficult. But, OK, today my vote goes to the XML enhancements. (FOR XML, the xml data type, XQuery.)&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Name three things that are new in SQL Server 2008 that you find are the most valuable developers?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The new date/time data types. A date-only data type in SQL Server is long overdue. And I mean long as in loooooooooooooooooooooong.&lt;/P&gt;
&lt;P&gt;The MERGE statement, that I've already mentioned. Beside the replacement for INSERT+UPDATE+sometimes DELETE, some of my MVP colleagues have found that MERGE has advantages over just a single INSERT or UPDATE statement.&lt;/P&gt;
&lt;P&gt;Table-valued parameters. This new feature will make my article on arrays on lists and in SQL Server far less interesting. It's too bad that TVPs are read-only, but for passing structured data from a client to SQL Server it is a tremendous addition. Just pass a dataset, and that's all.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What would you like to see in the next version of SQL Server?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;As you may guess, my wishlist to Microsoft exceeds what most kids sends to Santa Claus. But let me select a couple of important ones that all have a common theme: they all enhance the programmability of SQL Server in one way or another.&lt;/P&gt;
&lt;P&gt;To start with, I want Microsoft to implement the OVER clause in full. There are a class of problems like running sums, sliding aggregates etc that are very difficult to implement with set-based logic and good performance today. If you are not acquainted with these functions, I recommend that you read Itzik Ben-Gan's and Sujata Metha's paper&lt;/P&gt;
&lt;P&gt;on &lt;A href="http://www.insidetsql.com/OVER_Clause_and_Ordered_Calculations.doc"&gt;http://www.insidetsql.com/OVER_Clause_and_Ordered_Calculations.doc&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You also find links there to the Connect requests for these features in this document. Go there and vote!&lt;/P&gt;
&lt;P&gt;One of the biggest misfeatures Microsoft added in SQL 7 was deferred name resolution, and we are still paying the price. I have a Connect request about SET STRICT_CHECKS ON, that covers the problem with deferred name resolution, and a lot of things that MS could inform the programmer when he creates the procedure, rather than bombing in production: &lt;A href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260762"&gt;https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=260762&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I plan a longer development on that Connect item, that will appear as &lt;A href="http://www.sommarskog.se/strict_checks.html"&gt;http://www.sommarskog.se/strict_checks.html&lt;/A&gt; &amp;nbsp;in the not too distant future.&lt;/P&gt;
&lt;P&gt;SQL 2008 added table-valued parameters, but it was a big disappointment that they are input-only. The situation where I would have most use for table-valued parameters is when passing data between stored procedures -both in and out.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=299296"&gt;https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=299296&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A long-standing wish that I have is to be able to access the call-stack one way or another. This can help to make logging that I do for debug purposes more accurate. It can also help you to things like "if this trigger is called from this procedure, skip this action".&lt;/P&gt;
&lt;P&gt;&lt;A href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124537"&gt;https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124537&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Can you list any third party tools that you find useful to have as a SQL Server developer/admin?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The most important third-party tool to me is AbaPerls, but then I wrote it myself. :-) We use it to build our databases, load our stored procedures and build our update scripts. Unfortunately, I am currently not able to put it in the public domain.&lt;/P&gt;
&lt;P&gt;If you work with a data model of any size, using a good data-modeling tool is a great asset to keep the model documented. I have mainly used PowerDesigner from Sybase, but I guess ERwin and Embrocadero are good too. Unfortunately, these tools tend to be pricy.&lt;/P&gt;
&lt;P&gt;Apart from that... I know there are a lot of interesting third-party tools out there, I some I would really like to try out in practice. But unfortunately time has never permitted me.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;What is the biggest Database in GB/PB that you have ever worked with, how many rows was your biggest table ever?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Nothing impressive. The biggest customer database for the system I work with is just over 500 GB. The biggest table in that database has 62 million rows.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Which feature of SQL Server(in any version) do you like most?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;SHUTDOWN WITH NOWAIT!&lt;/P&gt;
&lt;P&gt;Seriously, if I am to mention a feature that I have not mentioned yet, I pick derived tables.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Why don't you have a blog? &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;CREATE TABLE Week (Hour int NOT NULL CHECK (Hour &amp;lt;= 168))&lt;/P&gt;
&lt;P&gt;Of course, it's all a matter of priorities. But I don't follow any blogs myself, and call me an old fart, but I have not really understood all this blogging hype. In the end, it seems a bit unstructured to me. I have seen blog authors ask about things they had posted themselves in their blog some months back...&lt;/P&gt;
&lt;P&gt;So I prefer to answer questions on the newsgroups, and when time permits compose longer articles for my web site.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;I understand that you speak a lot of languages, what is your fascination with languages?&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;I live in a small country, so I know that my own language is not enough.&lt;/P&gt;
&lt;P&gt;What particularly interests me with languages is how they relate to each other, how the differ from each other in a systematic way. I learnt French in school, and then I learnt Italian on my own with help of my knowledge in French. I spent a summer in Italy when I was a student, and studied transformation rules, so that if I saw a word in Italian I could see how the word would be in French, and thereby get the meaning of the word.&lt;/P&gt;
&lt;P&gt;And I would not really say that I speak a lot of languages. Beside English and Swedish, I can speak German, French, Italian and to some extent Spanish. There are a few more languages that I can read with some difficulty. But they are all Germanic or Romance languages. From other language families... I've studied some Polish and Russian but far from enough to claim that I speak them. Still, it is fascinating how even wee bits of knowledge can be useful. I was travelling in Bulgaria - a very nice country - and that small knowledge of Slavic was really useful for me.&lt;/P&gt;
&lt;P&gt;How many variants of you name have been offered?&amp;nbsp; James Luetkehoelter &amp;nbsp;has a long list of mispronunciations.&amp;nbsp; I bet that you have some beauties too - especially from the states.&lt;/P&gt;
&lt;P&gt;I haven't kept a count, but I don't think it's that many. "Sommerskog" is probably the most common. Strangely, I seem to see this as often from fellow Swedes than from abroad. Since "Sommar-" simply is Swedish for "summer", one would think that they can't fail.&lt;/P&gt;
&lt;P&gt;What is a little more puzzling to me is that so many English-speaking people get my first name flat wrong - they call me Eric!&lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=6997" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Interview/default.aspx">Interview</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/T-SQL/default.aspx">T-SQL</category></item><item><title>Perfect way to manage a database project.........not!</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2007/07/26/1942.aspx</link><pubDate>Thu, 26 Jul 2007 12:08:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1942</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>1</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/1942.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=1942</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=1942</wfw:comment><description>&lt;P&gt;I found this gem yesterday here: &lt;A href="http://www.tek-tips.com/viewthread.cfm?qid=1391668&amp;amp;page=1"&gt;http://www.tek-tips.com/viewthread.cfm?qid=1391668&amp;amp;page=1&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;here is the question&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;I have a situation where a person can have more then one item ordered. I need to layout the information as follows: &lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="FONT-SIZE:130%;"&gt;Person      Item Ordered      Item Description
----------------------------------------------
1            1 of 2           Item1
1            2 of 2           Item2
2            1 of 1           Item1
3            1 of 3           Item3
3            2 of 3           Item2
3            3 of 3           Item1
.
.&lt;/SPAN&gt;
&lt;/PRE&gt;
&lt;P&gt;The information is in the same table and Item Ordered is in relationship to Person instead of Item Description. I posted this same question on the Oracle forum, because the project is being done using two databases. Sql Server for development and Oracle for Production. I would like to get the SQL Server version of how to implement the select statement. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;It gets better&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Yes, it is crazy that two database are being used to develop the system, but the people who make the decisions claimed that in the preliminary stages Oracle was causing problems. So, they switched to SQL Server as the development database. Of course the end result it that the customer expects to implement Oracle. I suspect that someone was just too lazy to learn Oracle. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;And better&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;I asked my manager why Oracle and SQL Server and she stated that they were having load balancing issues (whatever that means). And when errors occured they were not sure how to fix them and it took too much time. At the beginning of the project there may not have been enough Oracle talent to tackle the problems. The Oracle talent available has been here for about 4 years before the project started. So, I wonder how much knowlege they DO have. I feel that an consultant should have been invested in. So, right now when stuff is put into testing for production we have to flip-flop between SQL Server and Oracle. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What? Who came up with that reason? This is just incredible. What do you think?&lt;/EM&gt; &lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=1942" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Oracle/default.aspx">Oracle</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Sad+but+true/default.aspx">Sad but true</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>Did You Know SQL Server Has A Black Box Like An Airplane?</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2007/06/03/1395.aspx</link><pubDate>Sun, 03 Jun 2007 19:33:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1395</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>1</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/1395.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=1395</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=1395</wfw:comment><description>Paul Randal writes: 
&lt;BLOCKQUOTE&gt;"Kimberly mentioned that SQL Server has a 'black-box' trace, similar to an aircraft flight-recorder, which I'd never heard of. It's an internal trace that has the last 5MB of various trace events and it's dumped to a file when SQL Server crashes. This can be really useful if you're troubleshooting an issue that causing SQL Server to crash or someone or something is telling SQL Server to shutdown and its unclear who or what is doing it." &lt;/BLOCKQUOTE&gt;Read here how to turn it on: &lt;A href="http://blogs.msdn.com/sqlserverstorageengine/archive/2007/06/03/sql-server-s-black-box.aspx"&gt;http://blogs.msdn.com/sqlserverstorageengine/archive/2007/06/03/sql-server-s-black-box.aspx&lt;/A&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=1395" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Internals/default.aspx">Internals</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Trace/default.aspx">Trace</category></item><item><title>Summer SQL Teaser #1 Dateformat</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2007/06/01/1368.aspx</link><pubDate>Fri, 01 Jun 2007 08:32:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1368</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>7</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/1368.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=1368</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=1368</wfw:comment><description>&lt;P&gt;Just to clarify, summer starts Memorial Day and ends Labor Day. I will post a teaser every Friday until Labor Day.&lt;/P&gt;
&lt;P&gt;Got this from my friend George, try to guess the output of the code below without running it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DATEFORMAT&lt;/FONT&gt;&lt;FONT size=2&gt; DMY&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;CONVERT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DATETIME&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'120607'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=1368" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Teaser/default.aspx">Teaser</category></item><item><title>Speed Up Performance And Slash Your Table Size By 90% By Using Bitwise Logic</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2007/05/29/test.aspx</link><pubDate>Tue, 29 May 2007 23:16:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:1336</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>19</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/1336.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=1336</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=1336</wfw:comment><description>&lt;P&gt;You have all seen websites where you can pick a bunch of categories by selection a bunch of check boxes. usually what you do is store those in a lookup table and then you create another table where you store all the categories for each customer. &lt;BR&gt;What if I tell you that you can store all that info in 1 row instead of 10 rows if a customer picked 10 categories. &lt;BR&gt;Take a look at this&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;1 Classic Rock&lt;BR&gt;2 Hard Rock&lt;BR&gt;4 Speed/Trash Metal&lt;BR&gt;You will store a&amp;nbsp; value of 1 + 2 + 4 = 7(you just sum the values)&lt;BR&gt;&lt;BR&gt;Now run this to check, the result will be 7 for a match and some other value otherwise&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;select 7 |1,&lt;BR&gt;7 |2,&lt;BR&gt;7 |3,&lt;BR&gt;7 |4,&lt;BR&gt;7 |5,&lt;BR&gt;7 |6,&lt;BR&gt;7 |7,&lt;BR&gt;7 |8,&lt;BR&gt;7 | 20&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;What is this | (pipe symbol)?&lt;BR&gt;&lt;STRONG&gt;From Books on line&lt;/STRONG&gt;&lt;BR&gt;The bitwise | operator performs a bitwise logical OR between the two expressions, taking each corresponding bit for both expressions. The bits in the result are set to 1 if either or both bits (for the current bit being resolved) in the input expressions have a value of 1; if neither bit in the input expressions is 1, the bit in the result is set to 0. &lt;BR&gt;The | bitwise operator requires two expressions, and it can be used on expressions of only the integer data type category.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Here is how you would typically use this, first create this table&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;CREATE TABLE &lt;/FONT&gt;&lt;FONT size=2&gt;NumbersTable &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;Num &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;3&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;4&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;5&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;6&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;7&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;8&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;9&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;10&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;11&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;12&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;GO&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Now run this&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; Num&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CASE&lt;/FONT&gt;&lt;FONT size=2&gt; 7 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;|&lt;/FONT&gt;&lt;FONT size=2&gt; Num &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHEN&lt;/FONT&gt;&lt;FONT size=2&gt; 7 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;THEN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Yes'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ELSE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;AS&lt;/FONT&gt;&lt;FONT size=2&gt; COL&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; NumbersTable&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Here is the output&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Num COL&lt;BR&gt;---- ---&lt;BR&gt;1 Yes&lt;BR&gt;2 Yes&lt;BR&gt;3 Yes&lt;BR&gt;4 Yes&lt;BR&gt;5 Yes&lt;BR&gt;6 Yes&lt;BR&gt;7 Yes&lt;BR&gt;8 No&lt;BR&gt;9 No&lt;BR&gt;10 No&lt;BR&gt;11 No&lt;BR&gt;12 No&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Okay enough theory let's start with some SQL code. First create this table which will hold all the categories&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;PRIMARY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Classic Rock'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Hard Rock'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;3&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Speed/Trash Metal'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;4&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Classical'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;5&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Rap'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;6&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Blues'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;7&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Jazz'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;8&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Alternative Rock'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;9&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Easy Listening'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;10&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Progressive Rock'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;11&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Punk Rock'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;12&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Swing'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;13&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Techno'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;14&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Pop'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;15&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Disco'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;16&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Big Band'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;17&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Gospel'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;18&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Heavy Metal'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;19&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'House'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;20&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Celtic'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;Now create the Bitwise table&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseMusicChoice &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;PRIMARY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VARCHAR&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;100&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#808080 size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We will use the POWER function to create the correct values&lt;BR&gt;run this&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;POWER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;-&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt;BitID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;Here is the output&lt;BR&gt;id BitID&amp;nbsp; ChoiceDescription&lt;BR&gt;1 1 Classic Rock&lt;BR&gt;2 2 Hard Rock&lt;BR&gt;3 4 Speed/Trash Metal&lt;BR&gt;4 8 Classical&lt;BR&gt;5 16 Rap&lt;BR&gt;6 32 Blues&lt;BR&gt;7 64 Jazz&lt;BR&gt;8 128 Alternative Rock&lt;BR&gt;9 256 Easy Listening&lt;BR&gt;10 512 Progressive&amp;nbsp; Rock &lt;BR&gt;11 1024 Punk Rock&lt;BR&gt;12 2048 Swing&lt;BR&gt;13 4096 Techno&lt;BR&gt;14 8192 Pop&lt;BR&gt;15 16384 Disco&lt;BR&gt;16 32768 Big Band&lt;BR&gt;17 65536 Gospel&lt;BR&gt;18 131072 Heavy Metal&lt;BR&gt;19 262144 House&lt;BR&gt;20 524288 Celtic&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Now insert it into the BitwiseMusicChoice table&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseMusicChoice&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;POWER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;-&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt;BitID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;Now create this customer table&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;BR&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;Insert these 5 values first, we will use these to compare performance later&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1DAB5C03-BC23-4FB5-AC3D-A46489459FE9'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'F7DDCDBC-F646-493A-B872-4E2E82EA8E14'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'E8A4C3D2-AEB0-4821-A49D-3BF085354448'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'52581088-C427-4D2F-A782-250564D44D8C'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1B2622C4-6C17-4E74-99D6-336197FBBCFF'&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Now we will insert a total of 10000 customers&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NOCOUNT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ON&lt;BR&gt;BEGIN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TRAN&lt;BR&gt;DECLARE&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;BR&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 6&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHILE&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 10000&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BEGIN&lt;BR&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;NEWID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;())&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;BR&gt;COMMIT&lt;/FONT&gt;&lt;FONT size=2&gt; WORK&lt;BR&gt;GO&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;Now add the primary key&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;ALTER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ADD&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CONSTRAINT&lt;/FONT&gt;&lt;FONT size=2&gt; pk_Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;PRIMARY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Create another table to hold the choices&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ALTER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ADD&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CONSTRAINT&lt;/FONT&gt;&lt;FONT size=2&gt; fk_MusicChoice_ID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FOREIGN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;REFERENCES&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;ID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ALTER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ADD&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CONSTRAINT&lt;/FONT&gt;&lt;FONT size=2&gt; fk_CustomerCode &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FOREIGN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;REFERENCES&lt;/FONT&gt;&lt;FONT size=2&gt; Customer&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;For each customer insert 10 random choices, this should run less than a minute&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NOCOUNT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ON&lt;BR&gt;BEGIN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TRAN&lt;BR&gt;DECLARE&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;BR&gt;DECLARE&lt;/FONT&gt;&lt;FONT size=2&gt; @CustID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;BR&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHILE&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT size=2&gt; 10000&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BEGIN&lt;BR&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; @CustID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; Customer &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;NEWID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;())&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TOP&lt;/FONT&gt;&lt;FONT size=2&gt; 10 id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@CustID&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;NEWID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SET&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; @LoopCounter &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; 1&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;BR&gt;COMMIT&lt;/FONT&gt;&lt;FONT size=2&gt; WORK&lt;BR&gt;GO&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Now add these indexes&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INDEX&lt;/FONT&gt;&lt;FONT size=2&gt; ix_CustomerMusicChoice_Cust &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;On&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INDEX&lt;/FONT&gt;&lt;FONT size=2&gt; ix_CustomerMusicChoice_ID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;On&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;BR&gt;Create the BitwiseCustomerMusicChoice which will hold the Bitwise values&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;CREATE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;identity&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;uniqueidentifier&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;not&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;null)&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;This will populate the BitwiseCustomerMusicChoice table&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;INSERT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INTO&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;SUM&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;POWER&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;-&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;))&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;as&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;GROUP&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;Add the index and foreign key&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;BR&gt;ALTER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ADD&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CONSTRAINT&lt;/FONT&gt;&lt;FONT size=2&gt; pk_BitwiseCustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;PRIMARY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#808080 size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ALTER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TABLE&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ADD&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CONSTRAINT&lt;/FONT&gt;&lt;FONT size=2&gt; fk_BitwiseCustomerCode &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FOREIGN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;REFERENCES&lt;/FONT&gt;&lt;FONT size=2&gt; Customer&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;CustomerCode&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;Now let's test performance. Hit CTRL + K (SQL 2000) or CTRL + M (SQL 2005) &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;These 2 queries will return something like this&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;STRONG&gt;ID	ChoiceDescription	Picked&lt;/STRONG&gt;
8	Alternative Rock	No
16	Big Band		No
6	Blues			No
20	Celtic			No
1	Classic Rock		No
4	Classical		Yes
15	Disco			Yes
9	Easy Listening		Yes
17	Gospel			No
2	Hard Rock		No
18	Heavy Metal		Yes
19	House			Yes
7	Jazz			Yes
14	Pop			Yes
10	Progressive  Rock	Yes
11	Punk Rock		No
5	Rap			No
3	Speed/Trash Metal	Yes
12	Swing			Yes
13	Techno			No&lt;/PRE&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CASE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHEN&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;IS&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;THEN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ELSE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Yes'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; Picked &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice cmc &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;RIGHT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice mc &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; cmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1DAB5C03-BC23-4FB5-AC3D-A46489459FE9'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; ChoiceDescription&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CASE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHEN&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;|&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;THEN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Yes'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ELSE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;AS&lt;/FONT&gt;&lt;FONT size=2&gt; Picked&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice cmc&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;CROSS&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseMusicChoice bmc &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1DAB5C03-BC23-4FB5-AC3D-A46489459FE9'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; ChoiceDescription&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;Look at the execution plan&lt;BR&gt;67.60% against 32.40% not bad right?&lt;/P&gt;
&lt;P&gt;&lt;IMG title=Plan1 style="WIDTH:682px;HEIGHT:456px;" height=456 alt=Plan1 src="http://i12.tinypic.com/526krgo.jpg" width=682&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Now run this, we will add AND bmc.ID &amp;gt; 0 to both queries. This will change an index scan to an index seek in the bottom query &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CASE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHEN&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;IS&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;NULL&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;THEN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ELSE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Yes'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; Picked &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice cmc &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;RIGHT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice mc &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; cmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1DAB5C03-BC23-4FB5-AC3D-A46489459FE9'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; ChoiceDescription&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CASE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHEN&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;|&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;THEN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Yes'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ELSE&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'No'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;AS&lt;/FONT&gt;&lt;FONT size=2&gt; Picked&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice cmc&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;CROSS&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseMusicChoice bmc &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerCode &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'1DAB5C03-BC23-4FB5-AC3D-A46489459FE9'&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT size=2&gt; 0&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ORDER&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;BY&lt;/FONT&gt;&lt;FONT size=2&gt; ChoiceDescription&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;That improved the performance a little. 82.75% against 17.25%&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG title=Plan2 style="WIDTH:689px;HEIGHT:450px;" height=450 alt=Plan2 src="http://i10.tinypic.com/6b2vqip.jpg" width=689&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Now look at the tables, after running dbcc showcontig you can see that the BitwiseCustomerMusicChoice is about 1/10th the size of the CustomerMusicChoice table which is as expected.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;dbcc showcontig ('BitwiseCustomerMusicChoice')&lt;BR&gt;---------------------------------------------------------------------------&lt;BR&gt;DBCC SHOWCONTIG scanning 'BitwiseCustomerMusicChoice' table... &lt;BR&gt;Table: 'BitwiseCustomerMusicChoice' (772197801); index ID: 1, database ID: 26&lt;BR&gt;TABLE level scan performed.&lt;BR&gt;- Pages Scanned................................: 41&lt;BR&gt;- Extents Scanned..............................: 6 &lt;BR&gt;- Extent Switches..............................: 5&lt;BR&gt;- Avg. Pages per Extent........................: 6.8&lt;BR&gt;- Scan Density [Best Count:Actual Count].......: 100.00% [6:6]&lt;BR&gt;- Logical Scan Fragmentation ..................: 0.00%&lt;BR&gt;- Extent Scan Fragmentation ...................: 0.00%&lt;BR&gt;- Avg. Bytes Free per Page.....................: 48.0&lt;BR&gt;- Avg. Page Density (full).....................: 99.41%&lt;BR&gt;DBCC execution completed. If DBCC printed error messages, contact your system administrator. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;dbcc showcontig ('CustomerMusicChoice')&lt;BR&gt;---------------------------------------------------------------------------&lt;BR&gt;DBCC SHOWCONTIG scanning 'CustomerMusicChoice' table...&lt;BR&gt;Table: 'CustomerMusicChoice' (724197630); index ID: 0, database ID: 26 &lt;BR&gt;TABLE level scan performed.&lt;BR&gt;- Pages Scanned................................: 428&lt;BR&gt;- Extents Scanned..............................: 55&lt;BR&gt;- Extent Switches..............................: 54&lt;BR&gt;- Avg. Pages per Extent........................: 7.8&lt;BR&gt;- Scan Density [Best Count:Actual Count].......: 98.18% [54:55]&lt;BR&gt;- Extent Scan Fragmentation ...................: 40.00%&lt;BR&gt;- Avg. Bytes Free per Page.....................: 386.5&lt;BR&gt;- Avg. Page Density (full).....................: 95.22%&lt;BR&gt;DBCC execution completed. If DBCC printed error messages, contact your system administrator.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;What happens if you want to get the total count of for example Classical?&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;COUNT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(*)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; CustomerMusicChoice cmc &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoice mc &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;on&lt;/FONT&gt;&lt;FONT size=2&gt; cmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; mc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Classical'&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;COUNT&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(*)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseCustomerMusicChoice cmc&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;JOIN&lt;/FONT&gt;&lt;FONT size=2&gt; BitwiseMusicChoice bmc &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ON&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;|&lt;/FONT&gt;&lt;FONT size=2&gt; MusicChoiceID &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;MusicChoiceID &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; bmc&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ChoiceDescription &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'Classical'&lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;Here are execution plans for SQl Server 2000 and 2005 
&lt;P&gt;&lt;IMG title=Plan3A style="WIDTH:817px;HEIGHT:514px;" height=514 alt=Plan3A src="http://i19.tinypic.com/6h3bc74.jpg" width=817&gt; 
&lt;P&gt;&lt;IMG title=Plan3B alt=Plan3B src="http://i14.tinypic.com/4mvwml3.jpg"&gt;&amp;nbsp; 
&lt;P&gt;As you can see SQL Server 2005 has a bigger difference than SQL Server 2000&lt;/P&gt;
&lt;P&gt;Now let's look at the overal picture, on a busy system you will have the customer queries running many times an hour/day. The report queries will run maybe a couple a times a day. I think this trade off is perfectly acceptable because overall your system will perform better. Another thing to keep in mind is that instead of 10 inserts you only have to do 1, same with updates, all these little things add up to a lot eventualy.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;So as you can see using bitwise logic is a great way to accomplish a couple of things&lt;BR&gt;&lt;STRONG&gt;Reduce table size&lt;BR&gt;Speed up backup and recovery because your table is much smaller&lt;BR&gt;Improve performance&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;Of course you have to do some testing for yourself because it might not be appropriate for your design. If your system is more of an OLAP than OLTP type of system then don't bother implementing this since it won't help you.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=1336" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Tip/default.aspx">Tip</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/T-SQL/default.aspx">T-SQL</category></item></channel></rss>