Slashdot Mirror


Why MySQL Grew So Fast

jpkunst writes "Andy Oram, who attended the MySQL Users Conference which was held April 16-18 in Orlando, Florida, attempts to explain MySQL's popularity in his weblog at oreillynet.com. (More weblogs about the 2004 MySQL Users Conference can be found at the The 2004 MySQL User's Conference & Expo Blog Collection.)"

149 of 621 comments (clear)

  1. Pretty simple. by Maul · · Score: 4, Insightful

    1. MySQL can be installed without cost.
    2. MySQL is easy to install and learn.

    --

    "You spoony bard!" -Tellah

    1. Re:Pretty simple. by ciroknight · · Score: 4, Interesting

      3. A very clean and easy to use API, in a language that is universally understood and almost universally portable (C) for incorporation into other products such as PHP, Perl, Python, Apache itself, and an endless amount of other applications.

      --
      "Victory means exit strategy, and it's important for the President to explain to us what the exit strategy is." G.W.Bush
    2. Re:Pretty simple. by DAldredge · · Score: 5, Informative

      3: MySQL SILENTLY ignores portions of the SQL spec and doesn't inform the applicaion that it doesn't do what the apps need it to.

    3. Re:Pretty simple. by mabu · · Score: 5, Insightful

      4. A tight, clean system that isn't bloated with crap that is superfluous to its main objective.

      5. A package that doesn't morph into a different product every six months with a new, catchy name, or divided into umpteen modules scientifically designed to require you to get every possible option in order to finish your application.

      6. A software package that isn't so ridiculously complicated to install and use that companies make more money selling training and support than they do implementing applications.

    4. Re:Pretty simple. by kpharmer · · Score: 5, Insightful

      > 3. A very clean and easy to use API, in a language that is universally understood and almost universally portable (C) for incorporation into other products
      > such as PHP, Perl, Python, Apache itself, and an endless amount of other applications.

      Portable - only in the context of its ability to compile & link. Not very portable in the sense that its users require it.

      MySQL has a nearly complete disregard for ANSI SQL standards - which results in the least portable syntax of any relational database I've used. This list includes:
      * mysql
      * postgresql
      * oracle
      * informix
      * db2
      * sql server
      * sybase

      Additionally, since it's the only entry on the above list that is missing or has limited support for transactions (yes I know - you can get it with its slower innodb file system now), views, etc - much of the sql written is brain-dead compared to other databases. So, one query in oracle/postgresql/etc can easily turn in three in mysql. This mapping queries between mysql and other databases causes considerable performance problems - since most other databases provide the best performance (in most cases) with given a single query to perform a unit of work.

      So, if the non-ansi syntax isn't a big enough pain-in-the-butt, having to rewrite the queries and application to get reasonable performance often is. Amazingly, I've found that it's easier to convert an application from SQL Server to Oracle than from MySQL to Oracle.

      Ah well. I suppose much of this will improve over time as they rewrite their engine to include more and more of that functionality that nobody wants.

      But in all seriousness - there's not much to analyze about its popularity guys. It pretty much boils down to:
      right place at the right time
      It owned the light, easy and free niche four years ago. It's a different ballgame with postgresql now, but mysql has built up quite the following in the meanwhile.

    5. Re:Pretty simple. by MP3Chuck · · Score: 2, Funny

      3. ??? 4. Profit!

    6. Re:Pretty simple. by Chexum · · Score: 5, Informative

      Interestingly, nowadays no one seems to remember that in '97-'98, there were basically three usable databases: Postgres95: sometimes difficult to compile and set up; mSql from Australia, which was popular, but was for non-commercial use only (thus they excluded themselves from many "markets"), and mysql, which at the time looked like a buggy clone of msql, but free to use.

      Most of the people at that time usually heard about apache + msql, and then stormed over to apache + mysql. Me, I managed to get Postgres95 to work, and never longed for anything else :)

      mSql, aka minisql tried to make a comeback lately, but I they botched their opportunity years ago with this "non-commercial use" stuff.

      --
      "Ten years from now, they could do it in a few seconds." -- The Racketeer of the Hellfire Club, 1993, Phrack 42
    7. Re:Pretty simple. by Ignominious+Cow+Herd · · Score: 4, Funny

      7. And it has the words "Don't Panic" on the cover.

      --
      Lump lingered last in line for brains, and the ones she got were sorta rotten and insane.
    8. Re:Pretty simple. by Jack+Porter · · Score: 4, Informative

      Parent is dead right.

      I moved from mSQL to MySQL in 1997 for a PHP2 project, because of mSQL's licensing restrictions. It was trivially easy to move because the API was almost identical (add a y in all the function calls).

      This dropin replacement for mSQL is what gave MySQL the start it needed in the web-backend market.

    9. Re:Pretty simple. by LousyPhreak · · Score: 3, Informative

      while i agree with you about mysql not having advanced sql features you missed one big point:

      its absolute fool-proof (especially for web apps, which is imho its primary use).

      anyone with basic understanding of php and a bit sql can throw together a working installation of mysql, add mysqladmin and he can develop web-apps in no time.

      i've now done 4 months of writing asp and sql server stuff and i must say i dont understand anyone going this path. admittedly i (have to) use sql server 6.5 on a win2k server but besides .net i dont think that much has changed.

      the problems range from simple things like having to close EVERY query done or you'll run out of connections (sure this really should be done but why gets php around this while ado does not),
      needing to select the fields in order of use in the app (if you need blobs),
      obviously no client side caching (if you use the blob 2 times with another field in between it fails too),
      failing an sql query fails the whole app (you sure can change that but error handling is definately not the strength of ado/sql server),
      having dates stored in the language of the server (means if you insert a date value from a string the resulting date depends on the language of the sql server --> 21.04.2004 only works on servers with non-english dates),
      oh and last but not least an absolutely brain dead escaping pattern with no (atleast i know of none) built in function to do it automatically for you

      so especially for web apps (and there especially with php) mysql surely blows most other combos (not sure on that but if you found something better i'd like to hear about that).

      --
      -- Karma: beyond good and evil - mostly affected by posting political
    10. Re:Pretty simple. by sasha328 · · Score: 4, Insightful

      It is actually quite simple. When I started to use an SQL database, I did not "choose" the engine. That was chosen for my by ht eproject I wanted to do.
      Basically, I wanted a Problem tracking system. Did some searching and stumbled on the excellent: MantisBT at sourceforge. It needed MYSQL. So I started using MYSQL. If it said it needs POSTGRESQL, I would have used that.
      I think that is the main reason why MYSQL is more popular. It's not the "price" or the "licence". I knew both were "free".
      I started my DB development using FileMaker about 10 years ago. I wait eagerly for the day it is fully ported to Linux, not just the server.

    11. Re:Pretty simple. by Ed+Avis · · Score: 4, Insightful

      The reason for its success: Worse is better.

      What you say about disregard for SQL standards is true, see MySQL Gotchas. Doing the wrong thing is not so bad, it's *silently* doing the wrong thing that you absoultely do not want in a database system. See also Why not MySQL, which is now rather dated (MySQL has grown some features since), but is a good introduction to what a database should do.

      Note also that anyone can write a database system with complete transactional integrity: you simply lock the whole database for every single operation and run only one query or update at a time, one after the other. The challenge is in getting the semantics of serialized database access but with good performance. This is what schemes like row-level locking and multi-version concurrency are for.

      --
      -- Ed Avis ed@membled.com
    12. Re:Pretty simple. by Eric+Savage · · Score: 5, Interesting

      A tuned query set is pretty much unportable no matter what DBMS you are using. Once you start getting into maintenance tasks, vendor-specific performance boosting options (which are often the reason you've chosen a vendor), and basically anything beyound the most basic selects and inserts, you code becomes tied down to a server. Also the general disregard most servers have for ANSI means that it is only a standard in theory, not in practice.

      --

      This is not the greatest sig in the world, this is just a tribute.
    13. Re:Pretty simple. by Laur · · Score: 4, Insightful
      you know, that little niche Operating System that happens to just run on 95% of computers out there...

      Not to be pedantic, but that should be 95% of desktop computers. Servers are another story, and since we are talking about a database (not a word processor) the distinction is relevant.

      --
      When you lose something irreplaceable, you don't mourn for the thing you lost, you mourn for yourself. - Harpo Marx
    14. Re:Pretty simple. by ajs · · Score: 4, Informative

      Additionally, since it's the only entry on the above list that is missing or has limited support for transactions

      Just flat-out untrue.

      I know - you can get it with its slower innodb file system now

      Actually, Berkeley DB and InnoDB both support transactions, but InnoDB is more complete, which is also (of course) why it is slower. In order to do propper transactional support, you have to inject a lot of overhead, and that's why MySQL has always been blazingly fast.

      The great part is that you can still fall back on the MyISAM table type (which implements everything you need in terms of atomic inserts and updates, as long as that atomicity is not required across several statements) if you want that speed, because MySQL is modular enough to support that. Imagine that, a modular database... who'da thunk.

      views

      The lack of views is directly related to the lack of sub-queries, which is being addressed, but is still a questionable feature. Ultimately, I've never seen a query that used a sub-query that didn't actually need to be optimized through judicious uses of de-normalization. Views are just a hard-coded sub-query, and as such give tremendous flexibility to the programmer, but are nearly impossible to correctly optimize, and the performance bottlenecks aren't always obvious on the first pass.

      Once sub-queries and views appear, I would still caution STRONGLY against their use.

      So, if the non-ansi syntax isn't a big enough pain-in-the-butt

      Well, that's really not fair. The syntax is no more deviant from ANSI than, say, Oracle or Sybase, but those databases' extensions have become so widly accepted that we don't think about how non-ANSI they are anymore.

      Granted there are a few places (especially in the types arena) where MySQL does not yet implement some ANSI features, but I've never run into a significant problems in those regards. My applications port fairly cleanly when I want them to, but in many cases, I've choses in the architecture to rely on some key features of MySQL that aren't standard, and I've benefitted greatly from having done so. Sure, I could port to something else later, if I had to, but it would be a pain, and I'd lose functionality.

      I suppose much of this will improve over time as they rewrite their engine to include more and more of that functionality that nobody wants

      It's not that nobody wants it, it's that most of the people who want it aren't actually providing reasons as such. They are just whining about x, y or z metric to which their pet database conforms, and MySQL doesn't. That game is not interesting. Transactions were required for certain applications, so they were added. Sub-queries less so, and so they will be added, but much slower. Things like full ANSI type compatibility are required only if a) you don't use an ODBC layer that translates types for you or b) you want to just take your native SQLServer app and re-point it to a MySQL database.

      Stored procedures and other similar features are just bloat, and gain you no real advantage (other than making a bridge between languages, which is the wrong place to solve that problem... after all it doesn't help you with your network protocols...).

      The bottom line is that MySQL is a fairly low-level database. If you want something higher level, cool, go for it. But, in programming langauges you don't say "C is useless because it doesn't have all of the features of ADA", you just use the right tool for the job. Why is this so different?

    15. Re:Pretty simple. by 110010001000 · · Score: 2, Insightful

      Actually:

      1) It doesn't cost anything
      2) It kind of works for most use cases

    16. Re:Pretty simple. by Betcour · · Score: 2, Insightful

      True, but even if a database is not hosted on Windows Server (and many still are), the developper might work on a Windows desktop. Having a local copy of the database to test out your work is convenient (and also safe).

      Also many newbie developpers run Windows. Once they have learned and moved on to Unix, they tend to stick to the tools they started out with.

    17. Re:Pretty simple. by Shurhaian · · Score: 2, Informative

      If you're comparing floats for equality, MySQL is the least of your worries.

      --
      NB: YMMV. IANAL. Take the above with a grain of salt.
  2. Re:It's too bad by ciroknight · · Score: 5, Insightful

    Too bad indeed.. if it weren't for poor products that get widely adopted fast, graet products would never be adopted. For instance, the reason why the world wide web took off was because Microsoft created a HORRIFIC web browser, but since now all computers had a web broswer, everyone had access.

    MySQL was in it's own, a huge part of the dot com boom, and therefore a huge part of the history, and therefore, the future, of the internet. Hate it, love it, it's a great product with a great niche, and for now, it'll continue along that path.

    --
    "Victory means exit strategy, and it's important for the President to explain to us what the exit strategy is." G.W.Bush
  3. Re:It's too bad by pagan26 · · Score: 3, Interesting

    Like Access 2003 it the cream of the crop? I use Access at work and I would gladly change over to MySQL. Better yet, what would you recommend?

    --
    Open Source: Every now and then, you get what you don't pay for.
  4. Why? by Daengbo · · Score: 4, Interesting
    But MySQL's very simplicity made it so small and fast that it quickly won over small users who wouldn't even understand what they were missing and how to use the fancy features offered by "real" database engines. In particular, MySQL proved ideal for the exploding area of dynamic Web content.
    We can talk about this one for hours.
    MySQL gets a lot of heat from the DBAs here (and probably with reason), but it's kind of like bashing MS Access -- it's useful enough for most small businesses.
    1. Re:Why? by jaaron · · Score: 4, Funny

      Please don't mention MS Access again. It makes my skin crawl just thinking about it. MS Access lets everyone think they can be a DBA. And then they want to run enterprise level warehouse tracking, inventory, payroll and who knows what else from the little database they whipped up between Solitare games.

      Sorry if I sound bitter but MS Access has given me more than one headache.

      --
      Who said Freedom was Fair?
    2. Re:Why? by Vellmont · · Score: 5, Interesting

      I think Access is great, for what it's intended for. It's perfect for small databases where someone would otherwise use flat files. It's also a great reporting tool to use to connect to other databases via ODBC.

      The problems with Access is just that people often don't know what they're doing and create awfull legacy systems that they then expect to keep extending. That's a problem that lies between the keyboard and chair, not with Access.

      If you want a database to complain about, complain about FileMaker Pro. It's an ugly, non-relational database that seems to ecourage people to make terrible, ugly systems.

      --
      AccountKiller
    3. Re:Why? by leperkuhn · · Score: 4, Informative

      The new filemaker finally supports the relational model. I haven't personally tried it yet however.

      --
      http://www.rustyrazorblade.com
    4. Re:Why? by LostCluster · · Score: 4, Insightful

      Access is the database sibling to Visual Basic... in fact, a code module in a .mdb file is Visual Basic for Applications... which aside from the fact that it depends on having Microsoft Access present is just about as powerful as Visual Basic itself. Access projects can even be compiled into .mbe files which locks down the forms and code users can't see or change your source.

      It's a great cheap tool when what you've got to do is open up a bunch of flat files, grab some data from each of them, and then output a pretty-looking report. You can then get it down to a push-button interface so that a newbie can run your tool, and you can go on to something more important.

  5. My Theory? by Anonymous Coward · · Score: 4, Funny
    People recognize what "MySql" is.

    They do not recognize "Postgres", or even know how to pronounce it. It sounds vaguely French and therefore un-American.

    Yep, it is that simple.

    1. Re:My Theory? by Paul+d'Aoust · · Score: 2, Informative

      hell, people can't figure out how to spell MySQL either. Is it 'my ess-cue-ell' or is it 'my sequel'? I think it's properly the first one, but nobody ever bothers calling it that.

      --
      Standing at the very edge of my imagination, I peered into the inky void and realised -- I couldn't think up a new sig.
    2. Re:My Theory? by next1 · · Score: 2, Interesting

      the postgres origins are actually quite interesting - it's here.

  6. inmy opinion by minus_273 · · Score: 3, Insightful

    2 reasons. LAMP and the fact that not everyone can afford or require for their tasks Oracle

    --
    The war with islam is a war on the beast
    The war on terror is a war for peace
  7. Re:It's too bad by Anonymous Coward · · Score: 5, Funny
    Better yet, what would you recommend?

    Oracle, of course.

    Love,

    Larry Ellison

  8. Why MySQL Grew So Fast? by Anonymous Coward · · Score: 5, Funny

    Because PostgreSQL takes longer to type :-)

  9. Picking the right tool for the job by Anonymous Coward · · Score: 5, Insightful

    Slashdot users complain that MySQL doesn't have the full feature set of some RDBMSes... but they miss the point. The reason MySQL has been succesfull precisely because it's been very good at delivering the features that a particular set of people need. To these users, additional features are a liability, not a feature.

    This reminds me a lot of DBase III. (Bear with me here...)
    DBase III wasn't a very good database program, but in its heyday millions of people used it and it got the job done for them. Even relatively inexperienced users could make use of it and write simple programs to manipulated their data. Even though it sucked, it was the right tool for a lot of jobs at the time.

    Compared to DBase III, both MySQL and PostgreSQL are excellent. I wish I'd had either one a decade ago when I started work doing clipper programming for a dog track related publishing company.

    For the dog track application I would have preferred Postgres; the rollback support would be pretty compelling for an application like the one we were doing. Rosebud is a sled, and Verbal is a huge liar. Darth Vader is Luke's father, and the Sixth Sense guy is actually dead. The planet of the apes is Earth, and Rocky loses. For something where I was just kicking around a database (Which I've also done a lot of) MySQL would be perfect. MySQL would be ideal in something like the RHS Orchid Registry, for instance.

    If application bigotry keeps you from choosing the right tool for a job, you will be a less valuable resource to those who employ you. Not too many people seem to "Get" this. People are often surprised that I will, on occasion, suggest that Microsoft products are the best tool for what they're trying to do. Usually those people asked me expecting a "Windows sucks use Linux" spiel, but if I think their situation warrants it (Inexperienced user, just wants to browse the web, word process and send E-Mail or wants to play games at all) I'll tell them to use Windows.

    1. Re:Picking the right tool for the job by Anonymous Coward · · Score: 5, Interesting
      The issue isn't really the lack of the feature set, but the fact that the MySQL devs used to be clueless idiots about it. Here's what the docs used to say about foreign keys:

      5.4.5.1 Reasons NOT to Use Foreign Keys constraints

      There are so many problems with foreign key constraints that we don't know where to start:

      Foreign key constraints make life very complicated, because the foreign key definitions must be stored in a database and implementing them would destroy the whole ``nice approach'' of using files that can be moved, copied, and removed.

      The speed impact is terrible for INSERT and UPDATE statements, and in this case almost all FOREIGN KEY constraint checks are useless because you usually insert records in the right tables in the right order, anyway.

      There is also a need to hold locks on many more tables when updating one table, because the side effects can cascade through the entire database. It's MUCH faster to delete records from one table first and subsequently delete them from the other tables.

      You can no longer restore a table by doing a full delete from the table and then restoring all records (from a new source or from a backup).

      If you use foreign key constraints you can't dump and restore tables unless you do so in a very specific order.

      It's very easy to do ``allowed'' circular definitions that make the tables impossible to re-create each table with a single create statement, even if the definition works and is usable.

      It's very easy to overlook FOREIGN KEY ... ON DELETE rules when one codes an application. It's not unusual that one loses a lot of important information just because a wrong or misused ON DELETE rule.

      The only nice aspect of FOREIGN KEY is that it gives ODBC and some other client programs the ability to see how a table is connected and to use this to show connection diagrams and to help in building applications.


      At this point anyone with RDBMS experience is rolling on the floor. THAT is why MySQL gets no respect.
    2. Re:Picking the right tool for the job by jesterzog · · Score: 4, Interesting

      If application bigotry keeps you from choosing the right tool for a job, you will be a less valuable resource to those who employ you.

      Pardon my ignorance, but what is it exactly that MySQL is good at that Postgresql isn't at least equal or better at? I'm all for using the right tool for the right job, but every time I've used at MySQL I've frequently encountered all sorts of crazy problems with no killer features to justify the change, that aren't already provided by both postgres and other databases. Maybe it's my application bigotry speaking, but I honestly can't see how MySQL is better at anything.

      The only things I can think of are the familiarity aspect, for people who are already very knowledgable about MySQL not wanting to switch, and possibly some minor issues with moving database files around on the underlying file system.

    3. Re:Picking the right tool for the job by jcdlondon · · Score: 4, Informative
      This was changed in 2001, Here is the commit.

      I think the changes are pretty entertaining...

    4. Re:Picking the right tool for the job by Unordained · · Score: 2, Insightful

      Looks like someone never used the feature of other databases of deferring restoring constraints until after the tables are uploaded ... and something about the word "integrity" just doesn't jive with the phrase "you usually ... in the right order, anyway".

      The locking aspect is interesting -- we use Firebird (the database) at work. We've got several dozen people online at any given time, doing updates. We rarely delete rows. Users can't delete -- they can mark things as deleted, but that only affects listviews' default behavior. Firebird will prevent you from updating a record that has a FK to a row also being updated by someone else -- the reasoning being that the other connection could just as well be deleting the parent row, or planning to. It's first-come, first-served, which prevents quite a few problems. Except we use pessimistic locking when users go to edit a record (it doesn't lock when you view.) So this happens often.

      I can't express how often that's gotten in the way, because I know that -usually-, we don't delete. It gives my users hell, because the server won't tell me -who- has the lock, to let me tell my users "uh, go down the hall and beat X senseless for being in your way."

      But boy am I glad the feature's there. Because sometimes we do delete. Integrity can't be guaranteed anywhere other than at the database level, because you have no guarantees about the client program accessing the database. Transactions can't normally see into each other to determine if a conflict might happen. E.F. Codd said, a long time ago, that the RDBMS itself had to be able to keep everything clean. And he's still right. It's not just a data-store.

  10. I strongly disagree by Trevor+Goodchild · · Score: 5, Insightful
    Mr. Oram's long-winded screed on MySql, while interesting, really makes the situation sound much more complicated than it is. You don't need to over-analyze this thing. The truth is simple and readily clear to everybody already.


    In a nutshell, MySql is free. Is it great? Hell no, but it's free. The only deep understanding of human nature or the DB marketplace one needs to comprehend here is that given the choice between something great and expensive vs. something mediocre and free, the overwhelming majority will go for free.


    MySql has always had huge problems preventing it from being accepted in the real "enterprise" marketplace, but most of us aren't in that market. Most of us need to yank a bit of data and cram it into a web page moderately quickly and as cheaply as possible. MySql does this quite well.


    What doesn't MySql do well? For starters, it's much slower than Oracle, MS-Sql, and even Foxpro. It has no row locking, no transaction support, and minimal cross-platform compatibility. But, it's free and it works more or less ok on Linux.


    Perhaps the real truth that Oracle fears is that eventually DBAs will come to realize that 99.9% of their storage needs aren't so "mission critical" as they would like to believe. I mean really, how many people out there can truely justify the cost of a full featured, robust database like MS-Sql? 10%? 5%?


    For the rest of us, a free - albeit slightly dodgy - solution will work fine.

    1. Re:I strongly disagree by Daniel+Dvorkin · · Score: 5, Informative

      What doesn't MySql do well? For starters, it's much slower than Oracle, MS-Sql, and even Foxpro.

      I've never used MS SQL Server or Foxpro. But having very recently developed a project on two DBMS tracks (Oracle and MySQL) I can tell you that identical queries on identical schemata with identical data are provably faster with MySQL than with Oracle.

      It has no row locking, no transaction support,

      This is no longer true.

      minimal cross-platform compatibility

      Huh? I've successfully migrated several complex databases, and the associated applications, between MySQL servers on Linux, Windows, BSD, and Mac OS X with no problem. And I mean no problem; in most of these cases, I haven't had to make a single change to the architecture, data, or application code. Everything just works.

      If you want to criticize MySQL, there are plenty of legitimate grounds to do so. (E.g., the lack of support for views, which in my primary job as a MySQL DBA drives me nuts at least once a week.) Don't just make stuff up.

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    2. Re:I strongly disagree by mcrbids · · Score: 5, Interesting

      I mean really, how many people out there can truely justify the cost of a full featured, robust database like MS-Sql? 10%? 5%?

      How about 100%!?!? Ever hear of PostgreSQL?

      ACID compliance, features that compare very nicely against MS-SQL/Oracle, foreign keys, triggers, transactions, embedded function definitions, the whole shebang.

      About the only thing that it lacks (for free) is decent clustering/replication capability - and you can buy that fairly easily in the form of patches.

      I've been using it for years, and it's a joy to work with!

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    3. Re:I strongly disagree by Osty · · Score: 5, Informative

      It has no row locking, no transaction support, and minimal cross-platform compatibility. But, it's free and it works more or less ok on Linux

      Before all of the MySQL zealots jump all over you, I should point out that MySQL does have transaction support (with the proper table type, and so long as it's built in, and you're using a current enough version, and you made sure to tag your tables with the right syntax to make sure they are of the right table type, etc), and does cross-platform well enough (better than PostgreSQL, as much as I love that engine). I don't know about row-level locking, but I'm sure it can't be far now.


      The biggest problem with MySQL is inconsistencies in both the engine itself and the development community. For years, the MySQL community told developers, "You don't need [transactions | foreign keys | triggers | stored procedures | subselects | ...]! You can work around those limitations in your application code and be better off for it!" Only they then go and implement those features that developers "don't need". That would be fine, except that the implementation of the features often leaves something to be desired, and have too many quirks. For instance, I mentioned above that you can only get transactions and referential integrity if you're using the correct table type. However, that table type is not the default, and even if you do create your tables properly to take advantage of those features, MySQL doesn't fail if the table type is not supported, choosing instead to make your table an inferior type. Now you think you have transactional support and referential integrity because your database built just fine, but what you don't know is that your hosting provider didn't build that table type into their deployment of MySQL, and you really don't have those features at all. Good luck trying to figure out why your data is corrupted even though you had proper transactioning in your code.


      MySQL has other problems as well. For example, if I want a column to be NOT NULL, I want any code that tries to insert a NULL into that column to fail. I don't want the engine to try to pick some default value for me. If I wanted a default, I would've added a default. That's why default constraints exist. By that same token, if I want a column to allow NULLs, I want to be able to put a NULL in the column. I don't want the current date/time instead of a NULL. If I define a column as auto-incrementing, I want to get an error if I try to insert something into that column. I don't want it to quietly succeed.


      There's plenty more on that page, though most MySQL apologists will tell you either that the problem is fixed (which is fine, except that being fixed in the latest beta is far different from being fixed in the most widely-deployed versions from different hosting providers and such), or that it "will be in the next release". These are the same people that will tell you that stored procedures are unecessary, and anybody that thinks they are is stupid (or they'll tell you that the performance gains from being able to compile your SQL code is negligible, while completely ignoring all of the other benefits of stored procedures ... *COUGH*security*COUGH* ...). And so on. MySQL is fine for what it does, but it's not the end-all of SQL software. Far from it.

    4. Re:I strongly disagree by Daniel+Dvorkin · · Score: 4, Interesting

      If you're interested: the database in question comprises about thirty tables, ranging in size from ~500 rows to over 200,000, with a fair number of three- to five-table joins. I'm not saying by any means that this proves MySQL is faster than Oracle for every query, but I think this is a fair-size test. Granted, it doesn't cover the multi-TB data warehouses which seem to be Oracle's primary claim to fame, but I know that some organizations with much, much larger data needs than my company use MySQL and seem to be happy with it.

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    5. Re:I strongly disagree by TheRealSlimShady · · Score: 4, Interesting
      I can tell you that identical queries on identical schemata with identical data are provably faster with MySQL than with Oracle

      ...provided the MySQL server isn't under load. Watch those queries get slower and slower the more users you add. With Oracle, watch the queries perform the same under a far greater load than MySQL will handle.

    6. Re:I strongly disagree by Safety+Cap · · Score: 4, Insightful
      For years, the MySQL community told developers, "You don't need [transactions | foreign keys | triggers | stored procedures | subselects | ...]! You can work around those limitations in your application code and be better off for it!"
      Couple that with this quote from the article:
      But MySQL's very simplicity made it so small and fast that it quickly won over small users who wouldn't even understand what they were missing and how to use the fancy features offered by "real" database engines.
      And you get the problem of people using a RDBMS that have little idea what they are doing. Stored procedures for speed/security? Not needed. Normalization (3+)? Academic exercise only. And so on.

      MySQL is good enough exactly because it is good enough. For enterprise-class applications, or systems that need to be maintained though several generations of DBAs/Developers, taking the "good enough" shortcuts will end up killing you in the end. Pushing the data integrity code to the app instead of asking the RDBMS to do all the heavy lifting will come to bite you in the arse when scalability becomes important.

      If MySQL works for the majority of installations, so be it. You never get to be number one in your pack by following the pack. You have to innovate and do what you do really well. "Good enough" only gets you outsourced.

      --
      Yeah, right.
    7. Re:I strongly disagree by LostCluster · · Score: 3, Insightful

      Watch those queries get slower and slower the more users you add. With Oracle, watch the queries perform the same under a far greater load than MySQL will handle.

      Of course, most of us who run on MySQL dream of the day that we'll have enough users to have to upgrade to another database engine. Afterall, it's much cheaper to throw MySQL onto a faster box than to bring in Oracle. :)

    8. Re:I strongly disagree by gnuman99 · · Score: 2, Insightful
      So what? With MySQL, it is cheap enough just to add another CPU or whatever. Instead of running on a Xeon, you just move to a dual or quad Opeteron.

      MySQL is a very fast database if the keys can fit in RAM. Today, RAM and CPU speed is not a problem as it once used to be. Differences between MySQL and Oracle are blurred.

      Sure, if you need 20,000 connections to the same database, maybe MySQL is not what you want. But MySQL licensing terms (for commercial usage) are much more flexible than Oracle's, especially if you want most bang for the buck for a small to medium database installation.

    9. Re:I strongly disagree by Osty · · Score: 5, Insightful

      Pushing the data integrity code to the app instead of asking the RDBMS to do all the heavy lifting will come to bite you in the arse when scalability becomes important.

      Hell, I don't even care about scalability. How about simply being able to trust your data? I'm currently working on a database-backed project that has aboslutely no foreign key constraints at all (among other problems, though the SQL engine is not MySQL and we are slowly but surely fixing the issues). We're constantly trying to clean up our data sets (not fun when you're talking about several tens of millions of rows) and track down the offending code so we can add constraints and then handle the insert errors properly, but it's been a long and arduous process. We're actually at the point where we're willing to throw away the current system and start over (or, well, run side-by-side for a while). It's not fun.


      If MySQL works for the majority of installations, so be it. You never get to be number one in your pack by following the pack. You have to innovate and do what you do really well. "Good enough" only gets you outsourced.

      Very true. Let me also add for those who think that MySQL is a good learning tool -- it's not. While MySQL does support much of the ANSI standard, you're going to run into problems (some of which are MySQL's fault, some aren't):

      • The tricks and hacks you have to do to work around MySQL's limitations (subselects, views, stored procedures, triggers, etc) are unnecessary in a real RDBMS, but you won't know that because you only know MySQL.
      • More importantly, the hoops you have to jump through in MySQL often lead to suboptimal SQL code. You may not really notice this on the light data sets where MySQL excels, but you will as soon as you try to migrate this knowledge to a larger system.
      • MySQL gives you a false sense of performance. Your data sets are small (ideally, otherwise you're going to be in for some shit with MySQL), and so you don't care about proper indexing, whether you're doing index seeks versus table scans, whether your data is well-normalized versus normalization trade-offs for performance, etc. What performance tuning you do learn from MySQL likely won't translate well to other systems.
      • MySQL has its own non-ANSI syntax additions that don't apply to other RDBMSs (AUTO_INCREMENT column type, for example)
      • Similarly, other RDBMSs have their own set of specific keywords, so you still have to put in the time to learn them (do you know how to do an auto-incrementing column in SQL Server? MySQL won't teach you that)

      If you want to learn, get yourself a real RDBMS. Microsoft's desktop engine version of SQL Server is free, and Oracle has free downloads available as well. If you don't qualify for either of those or don't agree with the licensing, at least use something more robust like PostgreSQL. If you're trying to learn, you'll be much better off learning on any of those platforms than you will with MySQL.
    10. Re:I strongly disagree by killjoe · · Score: 2, Informative

      Postgres is great. Too bad it's not multi threaded though. That kind of limits it's performance.

      --
      evil is as evil does
    11. Re:I strongly disagree by dtfinch · · Score: 2, Interesting

      As far as speed, both MySQL and Oracle have their place. MySQL has a good price/performance ratio, while Oracle scales well. There are situations where one server with a couple processors and lots of ram just isn't enough for a single database. It could take hundreds of servers, several processors each, sharing hundreds of disks, and Oracle can supposedly handle that fine while still guaranteeing transactional consistency and zero down-time when one of them bites the dust.

    12. Re:I strongly disagree by GooberToo · · Score: 5, Insightful

      200,000 rows is still considered to be a small database. If you access this database with anything concurrent select/insert/update activity, you might consider looking into PostgreSQL.

      While obviously, PostgreSQL isn't a cure all bullet, you might be surprised as how well it performs and how much better it scales.

    13. Re:I strongly disagree by GooberToo · · Score: 2, Informative

      Opps. Sorry, I missed this in my first post. Actually, PostgreSQL is the best bang for your buck. It's free, scalable and feature rich.

    14. Re:I strongly disagree by LostCluster · · Score: 2, Insightful

      Postgre might be Free, but converting an existing project that's already designed for MySQL to any other database engine has its costs.

    15. Re:I strongly disagree by GooberToo · · Score: 2, Insightful

      I wish someone would mod this up.

      MySQL users constantly forget that they are doing things wrong compared to most other systems. As a result, when they compare to other systems, they are almost always comparing best MySQL performance with absoluete worst case performance on other systems.

    16. Re:I strongly disagree by Anthony+Boyd · · Score: 5, Interesting
      With Oracle, watch the queries perform the same under a far greater load than MySQL will handle.

      I call bullshit. In e-Week's tests, Oracle and MySQL were dead even under load.

    17. Re:I strongly disagree by TheRealSlimShady · · Score: 2, Insightful

      If you read the article, it seems that MySQL performs so well because it basically returns most of the results from cache - i.e. the tables aren't changing much - which means the server isn't under load. Doing a select isn't really a load generating exercise. Try the same test when the database is doing considerable amounts of updates and the results will be very different. You'll also notice that the performance of MySQL drops by 2/3rds (according to the article) when you disable the in memory query results cache.

    18. Re:I strongly disagree by GooberToo · · Score: 2, Insightful

      Hate to burst your bubble, but that test highlights MySQL's greatest strength. Which is, what pretty much everyone openly admits. That is, readonly (select) environment. Serving web pages, what is generally very simple selects, has always been MySQL's best trick. Period.

      Obviously, 4.x has further helped its best trick scale even better. The complaint about MySQL is under load, especially in a more complex environment, (concurrent selects/updates/inserts), MySQL historically turns into a major dog. Generally speaking, it normally falls to the back of the pack in every test where scalability and a non-read-only environment exists.

      Now then, having said that, the chart only shows part of the picture. Were they allowed to turn the benchmarks to target each database or did they all run the exact same code? If the answer is, they all ran the exact same code, then the test is immediatley invalidated as it ignores many, many significant features that are pretty much standard on all modern RDBMS, save only MySQL. Did they use the default tables or did they use Inno tables? They need to use Inno tables to a fair comparison, especially so if the SQL wasn't implemented and optimized for the other platforms. Were the database connections persistent or transient? That too can be a major factor.

      Based on the results, I *suspect* some of the concerns I have are true, but clearly, that's nothing more than FUD at this point. Care to provide a link which provides more details?

    19. Re:I strongly disagree by joib · · Score: 2, Insightful

      Actually posgres isn't preforking, it forks an engine for each incoming connection.

      As the parent poster said, windows applications tend to use threading more than unix apps, because fork is very inefficient on windows, and I think that IPC is not as good either as on unix (IPC is used for shared caches etc.). On the unix platform, there is no clear-cut winner in the multithreaded vs. multi-process "war".

      E.g. apache 2 can be run both in multi-process mode and multithreaded mode. And guess what, on unix platforms the multiprocess mode is the default. If nothing else, this strongly suggests that at least the apache developers think that multi-process is better on unix than multi-threaded.

      Now, the one thing where multithreading clearly is better than multi-process is the time to open a new connection (creating a new thread is much faster than forking). And that's why apache uses pre-forking and with postgres you use connection pooling or persistent connections. So in the end the fork overhead doesn't matter at all.

    20. Re:I strongly disagree by GooberToo · · Score: 5, Insightful

      Please.

      Okay, since you insist.

      Postgres is the only database in wide use which is not multithreaded.

      So? And your point is?

      Don't make up lame excuses as to why it's better then multi threaded databases.

      Ah. Thankfully, I didn't have to make anything up. It's a simple fact. That means it's true to the layman reading this. ;) In threaded applications, simple stack or data segment corruption is all that is needed to corrupt anything from a single field, all the way up to a page, and perhaps more. This doesn't mean that threading shouldn't be used. It does, however, mean that simply stating that PostgreSQL uses a process model and try to imply that it's bad, is completely false. Especially in light of the fact that electing to use a threaded model carries significantly higher risks. Worse, should a single thread become corrupted, it corrupts the whole process. That means, even if the moment the corruption occurs, no damage is done, the potential for damage is still lurking as it may still be lurking within the process it self. This also means that should the process fail, the entire database is down, having crashed more than likely. This also means that the likely hood for repeated corruption is also increased.

      A process model, on the other hand, means that, at worst, a single connection (a single backend) will fail, allowing all other backends to continue. This, in theory, means a larger window for larger uptimes. Best of all, in the event that process corruption occurs, and the connection is transient, the potential for damage ends when the client disconnects. So, this leaves us with pretty much just shared memory being open to corruption. While it's possible this could go unnoticed, the odds are significantly lower that the corruption will go undetected before it has a chance to be written to disk, because of the data layout in shared memory and the implementation of checksums of hashes.

      In other words, the simple fact is, aside from the process fork versus thread spawn overhead, a process model is easily argued to be a superior model. So really, what you hoped to be a plus is litterally a negative in the eyes of all that understand how these things are put together.

    21. Re:I strongly disagree by arkanes · · Score: 2, Informative
      Everything you're saying is based on process-level protection provided by the OS. If the OS provides sufficently correct thread-level protection, then almost all of those issues become a dead heat. Also, it's not just spinning a thread vrs forking a process - process-level IPC is slower than thread-level IPC as well. And process-level IPC is no safer than thread-level. If one of your processes corrupts and crashes during a write, your database is just as hosed as if a thread did it.

      On Windows, at least, threading is far more performant - you _must_ thread for very fast IO, network or disk. Now that linux has a non-crap thread library, that may end up being true there also. The most reliable and performant databases in the world are threaded - thats a logical argument in favor of threading.

    22. Re:I strongly disagree by GooberToo · · Score: 2, Interesting

      Everything you're saying is based on process-level protection provided by the OS.

      Exactly. The OS is helping to ensure database integrity.

      If the OS provides sufficently correct thread-level protection, then almost all of those issues become a dead heat.

      Except, it's impossible for the OS to sufficently correct for thread-level protection while still providing the advantages in speed of thread level IPCs. So, it's safe to say, it's impossible for a threaded implementation to, "become a dead heat", with a process based implementation in that regard.

      Also, it's not just spinning a thread vrs forking a process - process-level IPC is slower than thread-level IPC as well.

      This is true. Just the same, thread level implementations tend to require more IPC synchronization, thusly, on average, the threading IPC speed advantages tend to become noise. This is because threaded implementations tend to have much higher levels of contention on shared resources. On average, I'd consider it to be a wash.

      And process-level IPC is no safer than thread-level.

      I'm sorry, but this doesn't entirely address the issues. Have a shared resource on the stack? IF you walk on the stack, you potentially just corrupted state for ALL threads and brought the state of the entire process into question. The same holds true for shared data segments.

      If one of your processes corrupts and crashes during a write, your database is just as hosed as if a thread did it.

      Maybe, maybe not. This is why we have transactions. If the corrupt transaction fails to complete, it's rolled back. Conistency is maintained. On the other hand, it's very possible, in a threaded implementation, to actually have the field value corrupted (it's length or value, etc), and have it still be written to disk. In otherwords, as I originally stated, a process implementation greatly reduces the chances for corruption. I did not state it eliminated it.

      On Windows, at least, threading is far more performant - you _must_ thread for very fast IO, network or disk.

      Because MS made the decision to bais threads over processes. On Linux, even with the old thread implementations, threads were really LWP and were not significantly faster at spawning than processes. That was because forking on Linux so fast compared to other platforms.

      Now that linux has a non-crap thread library, that may end up being true there also.

      Well, that addresses Linux and threads, nothing else. Remember, PostgreSQL runs on many more platforms than just Linux. It's always going to be a toss up on other Unix platforms to determine which is best (threads vs process). This is exactly why Apache 2.x implemented it's hybrid model. That is, so that they would be fast on MS' platform and fast on Unix platforms, allowing each to tune best for each unique platform.

      The most reliable and performant databases in the world are threaded - thats a logical argument in favor of threading.

      Bzzz. Popularity hardly makes right. Best of all, popularity hardly invalidates the issues which I put forth when contrasting the two models.

      Bluntly, neither model is perfect. Just the same, it's far *easier* to maintain consistency, uptime, and reliability with a process implementation. Notice that none of those speak to performance. Even if you refuse to accept that threading is not inherently faster than processes, which is more important to you? ACID or speed?

  11. Because they were the first to support subqueries by rimu+guy · · Score: 5, Insightful

    Not.

    MySQL has always been fast. That is probably why most people use it.

    MySQL has also been easy to manage (e.g. move database files from one subdirectory to another and the tables have also moved). That kind of simplicity brings tears to the eyes of an Oracle admin. There are a few options you can tune and teak, but by and large it just works out of the box (er, RPMs).

    And of course the reason it has been so popular is that it has been so popular. If you get my circular drift. People use it because there is a lot of documentation about it. Perl and PHP pretty much always have the MySQL libraries so it can be used on web sites, etc.

    Speacking of those subqueries, what's up with the delay getting 4.1 out from alpha to beta/gamma/production. I want to start using it. And 4.1 has been out in alpha for over a year now. Not to mention new development is already proceeding with the 5.0 release.

    - Run the latest and greatest alpha MySQL database on your own VPS

  12. I like MySQL by Anonymous Coward · · Score: 5, Insightful

    Not everyone is a database elitist. Not everyone has to worry about transactions nor store procedures. Triggers are neat, but not always necessary. (Insert obligatory VHS/Beta comment here.)

    What is great about MySQL is that it gives the average Joe or Ho with a machine a chance to build a database backed application of some sorts. Its cool. Its free. Its fun.

    Now for all of those who have based their fragile nerd self esteem on their DB experience or knowledge need to turn off their computers and go down to the local bar and talk to the local people about local people's reality. Ya MySQL is not DB2 nor Oracle, but it is still pretty cool. And the fact that Monty has written the greater portion of it is pretty cool too.

    Naysayers need to get laid!

  13. A Good DBMS for Beginners by mattlary · · Score: 2, Interesting

    For myself and many other college students, MySQL was a great system to play with SQL and experiment on. It's easy to setup on most systems, and it's also fairly easy to use (not to mention free). Don't get me wrong- I've used other systems that are much better than MySQL, but without MySQL to get my hands dirty, I'm not sure I would have bothered with anything else.

    1. Re:A Good DBMS for Beginners by GooberToo · · Score: 3, Interesting

      The problem is, most people would disagree. Why? It's not because many hate the DB....and many do. It's because MySQL teachs many non-standard and down right bad habits. If you want a system to learn SQL or relational theory, MySQL isn't right for the task. Why? Because very little of the learned knowledge will apply to any other system. If, after all, the intent is to learn a generalized body of knowledge, then by definition, you can't use MySQL.

      If, on the other hand, your objective is to learn MySQL, then by all means, learn by using MySQL. MySQL is well known for teaching people enough to be very dangerous but never enough to produce clean, fast, effecient SQL code for other RDMBS. In other words, learning on MySQL will probably teach you how to make the least effective queries for other platforms.

  14. ASUG 2004 by webword · · Score: 2, Informative

    I'm mainly interested in the SAP and mySQL connection because I simply didn't know about it until I read this. I know it is a bit offtopic, but I recently attended ASUG 2004 (America SAP User Group) and I posted news about it to my site. Perhaps you'll be interested.

    JavaScript, DOM, and Page Reloads

    Usability Interview with David Clark of TandemSeven

    More Observations on ASUG 2004

    ASUG 2004 and RFID

  15. Re:It's too bad by Anonymous Coward · · Score: 2, Informative

    One word: PostgreSQL. Also free, but makes mySQL look like a toy.

  16. Re:Because they were the first to support subqueri by TheRealSlimShady · · Score: 2, Interesting
    MySQL has always been fast.

    You forgot to add an important qualifier here - for a certain set of circumstances. MySQL is one of those products that is suitable for database content that isn't changing much - it's very fast reading from the database. The numbers change quite a bit when you're doing heavier work on the database, which is where Oracle & MS-SQL (or even PostGreSQL) come into their own.

  17. I still prefer PostgreSQL by Vellmont · · Score: 5, Informative

    MySQL still doesn't support triggers, and I like advantages of having support for varchars larger than 255 characters. Postgresql also supports the more standard method of an auto-number unique ID field of the sequence (and argueably more flexible). I _really_ like the flexibility of authentication that postgresql offers, though I haven't looked at MySQLs authentication as exensively.

    MySQL has grown up a lot though. Given how primitive and featureless it used to be it's gotten much better where the differences between the two have become smaller.

    --
    AccountKiller
  18. MySQL got there first and was "good enough" by kcbrown · · Score: 5, Interesting
    MySQL is an interesting example of how you can be wildly successful if you're at the right place at the right time with a product that's just good enough for the mission people have in mind.

    MySQL, even now, is actually rather sparse as database engines go: it lacks stored procedures, triggers, constraints, etc., in short many of the things that a serious DBA considers necessary in a database engine.

    But the mission it was originally created for is a mission that's a very common one: a simple, network-enabled data store with a SQL interface. That it lacked transactional capabilities didn't really matter: it was good enough for what many people needed.

    So its popularity exploded. In the free software world, there weren't any other contenders at the time that were sufficiently reliable or fast to do the job. PostgreSQL back then just wasn't fast enough, and tended to eat data. Not that MySQL was perfect in that regard, mind you, but at least MySQL gave you the tools to recover your data quickly in the event of a hiccup. PostgreSQL didn't -- it required you to do a full restore from backups, whereas MySQL let you use 'isamchk' to get you up and running quickly. That made a big difference to a lot of people.

    Today the story is very different. PostgreSQL is at least as fast, if not faster, than MySQL in many situations, especially under load, and has essentially all the features needed to make it a "real" database: transactions, stored procedures, triggers, views, constraints, etc. About all it lacks now is built-in replication (there exist third-party solutions), nested transactions, and point-in-time recovery (a.k.a. archive logs), things which MySQL is not likely to get anytime soon.

    Nevertheless, despite the fact that PostgreSQL is very much a superior solution in just about every respect, MySQL is more popular and thus has better third-party support. And it's thanks to the fact that it was in the right place, at the right time, with a "good enough" feature set.

    --
    Use 'slashdot stuff' in the subject line in any email you send me if you want to get past the spam filter.
    1. Re:MySQL got there first and was "good enough" by GooberToo · · Score: 4, Informative

      About all it lacks now is built-in replication (there exist third-party solutions), nested transactions, and point-in-time recovery (a.k.a. archive logs), things which MySQL is not likely to get anytime soon.

      The 3rd party replication solution was donated to the project a release or two back. It's now freely available. Having said that, internal code changes continue to take place to support better, faster, stronger replication capabilities in the future. No known ETA.

      I believe nested transactions as getting some low priority cycles. No known ETA. It is nice to know that it is are on their radar.

      Point-in-time recovery is being actively worked on and has been for some time. Expect it in the next major release or two. Probably will be in the next major release but may slip. It has slipped before. They elected to get better infrastructure in place so they wouldn't have to shoehorn it in. That's fine by me. That means a rock solid implementation with no major surprises down the road.

      things which MySQL is not likely to get anytime soon

      Too true. PostgreSQL is working on "enterprise features" and occationally someone stops to try to optimise here and there. As is, PostgreSQL is pretty fast. Performance is generally regarded to be in league with the big boys of the RDBMS world. PostgreSQL makes an attempt to adhere to SQL specifications. MySQL is pretty far from being conforming to any specification and is missing very basic RDBMS features. It will be years and years before MySQL is as feature rich as PostgreSQL is today.

      I believe other items which are getting some attention include distributed queries and two-phase commits. Along those lines, the protocol that PostgreSQL uses has been getting attention to better support more complex communication requirements (two-phase commit, distributed queries, etc).

      Lots of cool stuff is comming out of the PostgreSQL pipeline. Sadly, it just won't all be available tomorrow. :(

    2. Re:MySQL got there first and was "good enough" by GooberToo · · Score: 2, Interesting

      Under what conditions. Notice that the part you quote even made that stipulation.

      Generally speaking, MySQL is wicked fast for a single user that only does selects. Once you leave that safety zone, it becomes a huge question mark for MySQL.

      Want transactions and ACID? Performance just dropped. Want concurrent select/insert/updates? Performance just dropped a lot! It's fairly well understood that MySQL scales poorly.

      I remember back in the day when Crays where king. Someone with a workstation came out and said, "cool! I just matched a Cray box's performance with my machine". He was talking about some off the wall benchmark. The follow up reply said, "now, run 10 instances on each system and let us know now the results." He came back saying that performance was less than 1/10 what the Cray was seeing. I mention this example because it sooo reminds me of MySQL versus just about any other real RDBMS.

      There will always be situations where MySQL is fast. It's a simple database for simple tasks. Once things start to get complex or the load ramps up, MySQL suddenly starts turn pale.

      Don't believe me? Feel free to finish reading here. It shouldn't be too hard to find pro-MySQL guys stating the same thing, though perhaps worded slightly differently.

  19. Re:Why MySQL Grew So Fast by ciroknight · · Score: 4, Interesting

    Didn't help PostgreSQL or Firebird did it?

    Being free is one thing, being fast, elegant, easy to use and administrate, having a pretty clean security record, AND being free, those traits are something to write home about.

    Yes, we know, we know, MySQL isn't 99.99999% standards compatible. Well that's something to work toward, but at the time, it was quite usable for anyone who needed to use it, therefore it was used. If the internet needed transactions for things as simple as serving dynamic pages, then MySQL probably wouldn't have prospered, but it did have what the developers needed, when they needed it.

    --
    "Victory means exit strategy, and it's important for the President to explain to us what the exit strategy is." G.W.Bush
  20. Re:It's too bad by localman · · Score: 4, Insightful

    As a programmer who values practicality above theoretical purity, I don't really understand how something as incredibly useful as MySQL can be so "poor".

    All I know is that I've built three highly successful, high volume websites off of MySQL over the past five years and there's no way I could have done it as cheaply or quickly otherwise.

    Poor product indeed.

    Cheers.

  21. Re:Because they were the first to support subqueri by Anonymous Coward · · Score: 5, Insightful

    The statement "move database files from one subdirectory to another and the tables have also moved" is a tautology. The tables are in the files, so of course they move.

    "That kind of simplicity brings tears to the eyes of an Oracle admin." No, it doesn't. I'm an Oracle DBA, and I'm not crying because MySQL lets you move datafiles - so does Oracle. Typing "alter database rename datafile..." isn't exactly rocket science.

    Oracle also works "out of the box", especially when it's used for the sort of applications that can make do with MySQL. Granted, big motherfucker DBs might need some basic memory tweaking, but small sites can generally get by with the default parameters.

    MySQL is popular because it's free, and it meets the needs of certain users. That's all there is to it. It isn't better, and it isn't worse.

  22. Re:It's too bad by batkiwi · · Score: 4, Insightful

    Access and mysql aren't even competing. It's like saying, "Why would I use openoffice when I can use notepad?"

    Access is a minimal driver-loaded (no deamon) RAD tool, for when you need a quick and dirty forms and business logic driven app for a few people.

    People use it as a simple DB, but people also use MSword as a note-taking app. To replace access, you'd need mysql + a gui DB design tool (I know they're out there, just can't think of one off the cuff) + one of:
    -apache + php (no gui designer though!)
    -java (swing or swt with a gui designer)
    -VB
    -VC++ (although now you're getting heavier...)

    Plus a server of some sort to run the mysql on.

    Access is generally crap, and I hate using it, but it's great for a small office of 10 people to do small amounts of ordertracking/whatever type of small app they want pieced together quickly and cheaply, without UPKEEP of a server.

  23. Re:It's too bad by Anonymous Coward · · Score: 2, Insightful

    In fact PHP is a highly customizable, fast-rendering and highly scalable platform. It's not PHP maintainers' problem if their tool is badly used all over the place.

    I think you should keep your faulty beliefs for yourself young man, and give due respect to these very fine men.

    - Bernard Wolkacz

  24. Re:It's too bad by webword · · Score: 4, Insightful

    Poor design probably is less important than wide adoption when it comes to growth. But that is circular. Growth and wide adoption are really the same thing, right? At a minimum, wide adoption is a result of growth. They are tied together.

    So, taking a step back, what elements drive growth? That's the question. Google taught us that popularity matters.

    Taking a different step back, I would argue that usability has driven growth. Namely, ease of use. A quote from the article supports this:

    "But MySQL's very simplicity made it so small and fast that it quickly won over small users who wouldn't even understand what they were missing and how to use the fancy features offered by "real" database engines."

    My final comment about "poor design" is this. Assuming the design is poor, does it really matter? If it solves problems, and if people use it, and it is a Good Enough solution, and if the price is right, poor design is largely unimportant, right?

  25. I've Tried PostgreSQL by jwbrown77 · · Score: 5, Interesting

    I understand it's supposed to be better because it supports more ACID compliant features (and has for a long enough time to consider them stable). I just can't seem to get the hang of PG though. I far prefer the mysql command utility (and mysqladmin) over psql, I just find it easier to use. I also don't like the way PG handles users. I find it easier to add and modify users in MySQL and set their privileges with it's table method than PG which is more configuration based. I could figure everything out, but I've been too swamped lately to learn the in's and out's of PG. That's why I continue to use MySQL, because it fits my needs. Not PG's fault, but it's one of several reasons people still use MySQL.

    --

    -----
    How can you have any pudding if you don't eat your meat?
    1. Re:I've Tried PostgreSQL by Anonymous Coward · · Score: 3, Interesting

      Use PgAdmin. Its a GUI to administering postgre databases. It makes managing privileges a joy.

      Postgres also stores users in a table which is editable like any other table (this is nice, but obviously dangerous). You don't have to do it through SQL-ish commands. All of this is made very simple by PgAdmin though.

    2. Re:I've Tried PostgreSQL by wagemonkey · · Score: 2, Insightful
      Also a way to emulate MySQL idioms transparently on PostgreSQL would make migration a blast. I've been considering moving our system from MySQL to PostgreSQL but having to check and correct every single SQL query of a 100k+ PHP application is just not worth it.
      I hope this is a joke.
      You want PostgreSql to emulate MySQL code? Please mod parent up +5 Funny.

      That would put a layer of code onto PostgreSQL to slow it down to enable it to run bad SQL even slower. If you're trying to turn PostgreSQL into a dog and complain about performance it's a brilliant idea.
      Migrating from one RDBMS to another will always involve tweaking. If you're migrating from MySQL you can call it re-writing instead. There're lots of other posts explaining this better, but it's not really compatible with anything except itself. It's probably easier to migrate from Access....

  26. Re:It's too bad by MagikSlinger · · Score: 4, Informative

    Maybe for you. For me, it was dead easy to set-up, quick to learn and the @#$! thing WORKED out of the box! I can't say the same about Posgress.

    At anyrate, the better way to look at MySQL is the kind, gentle introduction to SQL until your needs drive you to a grown up database. For my dev team, we just needed a backend for our existing Bug database without paying exhorbitant charges to IT Support to use MS SQL. MySQL so fits the bill.

    --
    The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com
  27. Re:It's too bad by fm6 · · Score: 4, Informative
    For instance, the reason why the world wide web took off was because Microsoft created a HORRIFIC web browser, but since now all computers had a web broswer, everyone had access.
    Say what? The web had lots of momentum as early as 95. At which time Microsoft was still in denial about the whole Internet thing. Which is why Windows 95 came with a lot of MSN software and libraries (then based on proprietary protocols) and no TCP/IP stack at all. That fact that MSN began as an "online service" (in the model of pre-Internet AOL and CompuServe) rather than as an ISP indicates how little interest Microsoft had in the Internet in general and the Web in particular.

    When Microsoft realized that they had backed the wrong horse, they had to come up with their own Internet strategy in a hurry, or be left behind. That is why early versions of IE were such hack jobs. And for some years, other browsers still did more to raise awareness of the Web. But once the Web was established, nobody bothered to install other browsers -- why bother, when Windows came with one? Between that and Netscape's declining interest in browser development...

    As for MySQL: when the Web exploded, web developers needed data engines that didn't cost a lot and were easy to understand. The excluded all serious SQL servers. I'm not sure why nobody picked up on simple ISAM systems like Berkeley DB -- perhaps they all had licensing issues. Anyway, MySQL was something they could use for free, it was easy to understand, and it was powerful enough for most web applications. You can't do the complicated operations that separate a true RDBMS from a simple dataset library -- but most web developers didn't have the skill to use these operations anyway.

  28. bullshit by ErichTheWebGuy · · Score: 5, Insightful

    Remember when Reasoning, Inc audited the code? They found that it had 0.09 errors per 1,000 lines of code while proprietary competitors had 0.56 errors per 1,000 lines. That's more than 6 times as many errors in the proprietary databases. http://searchenterpriselinux.techtarget.com/origin alContent/0,289142,sid39_gci941817,00.html

    Quality product. That is why it is popular. Perhaps you should research your argument before posting a flame next time.

    --
    bash: rtfm: command not found
    1. Re:bullshit by Hangtime · · Score: 2, Insightful

      This will probably come out as a troll, but oh well. MySQL in terms of complexity is no where near what DB2, Oracle, or MS SQL are today. It boils down to that probably MySQL is supporting 1/4 to 1/3 of the things that these particular platforms support today. Also, these platforms have to support legacy apps as well. Freaking DB2 has to support stuff from darn near the inception of SQL while also adding new features. MySQL has relatively a short history of code and a feature set that is much smaller in comparison. So if you have a fairly new product and your doing things that are simpler and already solved by others of course your going to have an easier time doing it and thus less errors.

  29. Simplest database by mnmn · · Score: 3, Interesting

    It was the simplest database at the time that was marketed well. Minisql was not marketed at all, and of course wasnt really opensource.

    People need to use SQL and need something simple and fast. Postgresql is not optimised for simple web applications out of the box.

    sqlite I think came much later, but would have fit the bill and IMHO would have taken Mysqls place early on. I know I was looking for something like sqlite making my simple website and mysql seemed to complex.

    --
    "Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
  30. Incorporation by ae-valkyre · · Score: 2, Interesting

    Another reason is that so many (web) programs incorporated it, like vBulletin. it was free to use and easy to learn, and it was painless to deply on virtually any platform.

  31. MySQL, PostgreSQL, Oracle, MSSQL, etc.... by linuxtelephony · · Score: 5, Insightful

    Over the years I have been a user on PostgreSQL, MySQL, Oracle, and MSSQL, and an admin on PostgreSQL and MySQL.

    Having said that, I prefer MySQL and PostgreSQL to both Oracle and MSSQL, in most situations. However, given my experience with MySQL and PostgreSQL, I am glad that I have returned to PostgreSQL.

    Why PostgreSQL? Simple. I am able to use referential integrity, triggers, and foreign keys in my databases. I can use subqueries, and more. There are certain databases where the data integrity is the important part. Having the database enforce that integrity is cheap insurance. Having transaction support, including rollbacks, are great for operations that affect multiple tables. I also like the way Postgres strives for SQL compliance.

    MySQL is improving. Everytime I check they are getting more and more support of things I consider critical. Especially in the last 9 months to a year. But not yet enough for me.

    I was involved in a fairly large scale production system that used MySQL as its heart. Unfortunately, at the time, PostgreSQL just did not have the performance that was needed. And, the main DBA was a mysql zealot. With MySQL, we seemed to constantly have to figure out creative work arounds for what MySQL lacked. Table level locking was a headache. No referential integrity and lack of transactions were a nightmare.

    I still see MySQL as the better solution when you need to serve text files via SQL really really fast. But, when you need to provide a specific level of accountability and traceability, PostgreSQL is still my choice.

    --
    . 62,400 repetitions make one truth -- Brave New World, Aldous Huxley
  32. Note to the Mods... by DAldredge · · Score: 2, Informative

    What I posted wasn't a troll, it was the truth. Just because something pisses you off, doesn't mean it is a troll.

    1. Re:Note to the Mods... by B3ryllium · · Score: 3, Funny

      Perhaps it was random MySQL data corruption at work. ;-)

      (Disclaimer: I like MySQL.)

    2. Re:Note to the Mods... by golgotha007 · · Score: 4, Insightful

      who says that MySQL is better than Oracle? i've never read or seen that anywhere. it is two different products in two different classes. they can't be compared.

      it's all about the right tool for the right job.
      coding up the next Ebay? use Oracle.
      wanna keep track of your DVD collection? use MySQL.

      i've used Oracle and Postgres, and i've setup triggers and stored procedures and hard relationships.. sure it's useful,
      but it's rare when i'm doing a project that's out of scope of MySQL (and i can do all the trigger, stored procedure stuff within the application code, big deal).

      MySQL also allows you to do rapid development of small to medium sized projects. what if one of my projects gets so big that i need to scale it up? well, if i am so unfortunate to have one of my projects go big time, then i'm sure i'll get big dollars and redesign the project for the big leagues.

      here's another example:
      i was working for a small company that finally recieved it's funding (15 mil for 10 employees). well, the company started hiring corporate types left and right.
      well, these corporate folks had little to do except dress nice and figure out how to spend our funding.
      i was called into the CTO's office. he sat me down and explained to me that he wanted to setup a database to store employee information (address, phone number, normal stuff). at that point we had about 25 employees. i was like, no problem i'll setup a MySQL database with a PHP front end and have it done this afternoon.
      he told me to do nothing and wait for the Oracle people that were coming the next day to discuss licensing.

      my jaw hit the floor.

      but this is exactly the problem. people don't realize which tool they should use for what job.

    3. Re:Note to the Mods... by jadavis · · Score: 3, Interesting

      I have a very similar story. Small company, big spending, decent business plan, very poorly implemented.

      I went to talk to the guy in charge because he got in his head to buy Oracle. I was trying to convinve him to use MySQL because of cost. He thought Oracle was the only way a company could operate.

      Here's what actually happened:
      (1) We settled on Sybase
      (2) Took forever to get plans worked out and the software in place (it would have taken a matter of hours for me to get MySQL in place...)
      (3) We never moved off our "temporary development" system that was a flat text file[1]
      (4) Investors realized nothing was making it to market and too much was being spent, and company went under.

      [1] The flat text file -- 100's of MB -- was being read several times each time the front page of the company website was loaded. And no, nobody ever got sybase in place behind it. After all, details like that don't impress investors.

      Disclaimer: I now use postgresql. At the time ('99) postgresql still had some rough edges, but now it's the best database out there for everything that I use an RDBMS for.

      --
      Social scientists are inspired by theories; scientists are humbled by facts.
    4. Re:Note to the Mods... by the_mad_poster · · Score: 3, Funny

      (1) We settled on Sybase.
      (4) Investors realized nothing was making it to market and too much was being spent, and company went under.

      Heh... you could've just combined steps 1 and 4, and skipped 2 and 3 altogether, and the story still would've made perfect sense.

      --
      Alito: A vote for Alito is a punch in the eye to put that bitch back in her place!
  33. Yeah... I'm gonna sqitch from Oracle to MySQL by l0ungeb0y · · Score: 4, Insightful

    "On the other side of me, at that lunch, sat a database administrator whose facility is planning a migration from Oracle to MySQL"

    Whatever moron made that decision needs to be outsourced to India. Thats sort of like trading in a shiny BMW for a freakin go-cart.

    Sure, MySQL has gotten better, has always been speedy and is great for down and dirty webservices. But the bottom line is still the same: It's not a **real** database. Transactions? Stored Procedures? Triggers? Schemas? Groups? Views? Uhhhh Hello!!!

    Granted, MySQL is popular; just about every cheapo hosting service has installed it and offers it up as part of their base level $20.00 a month hosting pack.

    Being a seasoned webdeveloping gun for hire I deal with online data services all the time. Time and time again I use postgreSQL.
    Sure, the client always brings up the MySQL question, but when I show them what can be done with postgreSQL and what can't with MySQL it becomes glaringly obvious that MySQL is __NOT__ the tool to use if you have any real service to offer or data to mine.

    For all you MySQL advocating web developers out there:
    If you put all the SQL functionality where it should be -- in the database -- and not the middleware you'd never even think of MySQL as a real alternative, because MySQL doesn't support that.

    1. Re:Yeah... I'm gonna sqitch from Oracle to MySQL by ErikZ · · Score: 5, Interesting

      "Whatever moron made that decision needs to be outsourced to India. Thats sort of like trading in a shiny BMW for a freakin go-cart."

      I can easily think of a reason to go from Oracle to MySQL.

      1. You don't have a database that needs Oracle.

      2. Therefore downgrading will save you fat sacks of cash.

      I've known someone who was fired for choosing Oracle. They suck an enormous amount of money into the project and it was far more database than they needed.

      --
      Democrats or Republicans. They are both taking us to the same place and they are not afraid of us anymore.
    2. Re:Yeah... I'm gonna sqitch from Oracle to MySQL by evilviper · · Score: 2, Insightful
      Thats sort of like trading in a shiny BMW for a freakin go-cart.

      Considering the price of gas, it would be a good trade.
      --
      Slashdot gets worse every day... Pipedot: News for nerds, without the corporate slant
    3. Re:Yeah... I'm gonna sqitch from Oracle to MySQL by Decaff · · Score: 2, Interesting

      You are missing the point. The point is that other databases, such as Postgresql, offer virtually all the SQL features of Oracle including a reasonably compatible PL/SQL language. Oracle is not a simple database. Developers tend to use its features. MySQL can't provide those features. Other databases can.

      Suggesting a migration from Oracle specifically to MySQL is typical management bullshit along the lines of 'I have heard of both of those and they are both databases, so they must be the same'.

  34. Win32 Binaries by Anonymous Coward · · Score: 2, Informative

    One of the reasons why MySQL wins on PGSql is it Win32 support. We may not all like windows, but a lot of people use it, MySQL has addressed this market, PGSql still dosen't

    1. Re:Win32 Binaries by GooberToo · · Score: 3, Insightful

      I completely agree with you here. I believe that once the native Win32 port of PostgreSQL finally becomes available, it will start to make some serious inroads.

      The cygwin port is good for playing and development purposes, but it is not ready for production purposes. If someone is using it in production, good luck and more power to them. While I consider my self to be very pro-PostgreSQL, I wouldn't use the Win32 cygwin port in a production environment for anything.

      For what it's worth, the native Win32 port is being actively worked on. Hopefully it will be available in the next major release. It may slip to the second release out. Nonetheless, it is actively being tested, developed, and worked on.

  35. It's all in the name or is it the license? by Anonymous Coward · · Score: 3, Interesting

    I think it does have a lot to do with the name.
    MySQL, maybe it is My-Ess-Que-Ell or maybe it is My-Sequel, but Postgresql? Postgr-ehz-Que-Ell? Postgreh-Sequel, Postgray-Que-Ell? (Does sound vaguely French.) Ugh! (Nothing against French.) Hate the name, but love the program. Although it seemed that there were more people choosing MySQL over Postgresql when I started evaluating the two, there were two key features that led me to choose Postgres(whatever) over MySQL

    1) Views (How can you have a/an SQL database and not support views!)

    2) Free license for corporate use

    So, if I chose to work with MySQL I would have to give up using views. Also, if I wanted to use it at work, I would have to convince the boss to buy a license. On the other hand if I worked with Postgres(whatever), I got views, and did not have to persuade the boss to part with any money. So it was 2 minuses in the MySQL column, versus 2 pluses in the Postgres column and the Ayes have it. After MySQL changed their license, inertia kept me going forward with Postgres (and MySQL's lack of views and triggers).

    Now that MySQL has a GPL version, it is less of an issue, but at first, it was free for non-profit use only (or so I understood), while Postgres was free for any use. It surprised me that so many would choose the non-free / less free license.

  36. Re:It's too bad by localman · · Score: 2, Insightful

    Hmmm... a $72 million a year toy? That's what the most recent company I work for had in revenues last year. Entirely built upon MySQL. I'm sure that's small change from your point of view, right?

    Sorry, but practical trumps theoretical every time.

    Cheers.

  37. Views? Subqueries? Easy to move databases? by linuxhansl · · Score: 5, Insightful

    I for one cannot understand how anybody can do *any* serious database work without views and subqueries (the latest MySQL alphas/betas have support for subqueries). The whole relational theory is (almost) broken without these.
    To me that's mindboggling. Without that I'd rather use berkeley DB or flat files to load and store my data. How do you do row-level security without views, what about column security. Or just different views for different users. These are just a few example that require *a lot* of coding without database support (not to speak about performance). Heck, do people even understand what views (or triggers, etc) are?

    People say it's easy to move databases around my MySQL. Yeah, sure, as long as you stay with the ISAM tables, which do not support ACID. InnoDB tables support ACID but cannot simply be copied around.

    It makes me shudder to think about all the future DBAs that accept the low standards MySQL is setting.

    1. Re:Views? Subqueries? Easy to move databases? by linuxhansl · · Score: 4, Informative

      Excuse me?
      Views represent first class relational objects that can be used in yet other relational expressions (just like physical tables can be used), like joins, etc. A view itself may represent a join of a data table with a security table (for example), and maybe used instead of a physical table. If specified correctly a view can be updatable.
      "Bookmarked" SELECTs are *exactly* the kind of hack you have to resort to with databases like MySQL.

    2. Re:Views? Subqueries? Easy to move databases? by GooberToo · · Score: 2, Insightful

      Well, I think you missed the point of MySQL. MySQL targets the "select x from y where a='123'" group. There's nothing complex about it. Serious database work is not done with MySQL, thusly, serious features required to do serious work are absent. This may change as MySQL matures, but the fact remains, its simplicity generally meets its user's skill level. Many (most?) MySQL users are there because they are clueless about RDBMS systems and MySQL was the first free product that ran on Windows that they heard associated with SQL. So, for them, the vast majority have no idea they are even missing powerful concepts such as subselects, ACID, triggers, RI, stored procedures, etc.

      Remember, happiness is completley subjective.

  38. Re:It's too bad by localman · · Score: 2, Insightful

    Really? That's odd... I've been using it on high volume sites for about 5 years now and I've never had one data corruption problem. Does my anecdotal experience cancel out yours?

    (Once did have an index become corrupt, but a "repair table" command fixed it).

    From what I can tell, most people who trash MySQL do so on theoretical grounds. In practice it is amazingly useful. That's all any product needs to be.

    Cheers.

  39. Re:It's too bad by drsmithy · · Score: 2, Interesting
    For instance, the reason why the world wide web took off was because Microsoft created a HORRIFIC web browser, but since now all computers had a web broswer, everyone had access.

    But no-one used that "HORRIFIC" web browser, except to download Netscape. At least util NN4, when Netscape shot themselves in the foot (and took off most of their leg in the same shot). After that (well, until recently) Internet Explorer was a better browser - far from "HORRIFIC".

  40. Re:It's too bad by cscx · · Score: 4, Informative

    Which is why Windows 95 came with a lot of MSN software and libraries (then based on proprietary protocols) and no TCP/IP stack at all.

    That, buddy, is double-plus untrue. The second part anyway.

  41. Re:MySQL for Sybase admins... by LostCluster · · Score: 3, Insightful

    From what I see so far, there isn't much equivalent to any of this so far. You create a database, and your server config determines where ig goes and (I think) the format/type used for the physical files.

    To put it bluntly, you're going to use the default filetype for everything in MySQL. There's some nods to the idea of having ram-based tables and the like, but if you're really serious about that stuff then MySQL is the wrong tool to be using.

    One of the biggest knocks against MySQL is that its favorite file type is basically a flat file with just a bit of an index to it. More or less, that's true. MySQL isn't meant for somebody who cares about where exactly on the hard drive the data is going, just that it's being saved and will respond when called upon with a SELECT query.

    Think of yourself as a database user rather than a database admin. This thing has most of the "administrative" stuff hardcoded. You don't start until it's time to define tables and indexes...

  42. Re:The Truth About MySQL by fimbulvetr · · Score: 3, Insightful

    You are what most people consider to be a ignorant, propaganda-influenced bloke (or average consumer) if you're willing to:

    A. Believe that 33.5% is a significant number, of any type. See the book, how to lie with statistics.

    B. Believe any propaganda released by Microsoft, or any other released "benchmarks" when they haven't released exactly how they've done the testing.

    C. Believe that an MCSE is enough to make me consider you an industry professional. I can read and memorized books too.

  43. MS Access from hell by Safety+Cap · · Score: 4, Interesting
    And then they want to run enterprise level warehouse tracking, inventory, payroll and who knows what else from the little database they whipped up between Solitare games.
    My last assignment at a Big Oil Company was to produce a list of files on the shared drive, grouped by person, age, and total size. As all work at the BOC was billed, and my project was budgeted only for my time, I was not allowed to have a DBA create either an Oracle or MS SQL DB (something that would've only taken 5 minutes). I had to use MS Access; suggesting the use of FOSS would be like saying you wanted to summon Satan to get your work done.

    Things got interesting when I loaded all 2 million rows of data (one per file) into the poor POS Access DB. It took over 8 hours (I left it running and went home; it was still running when I got back. Lo and behold, it accepted every row. Trouble started when I discovered that trying to save a query or report would send the machine into la-la land. So, I had to dump the DB for every tweak of the report. After a week of messing around (time "well spent," as using Oracle/MS-SQL would have saved at least 4 days of waiting for row population), I finally got everything working, and turned in the report (something like a 500 page PDF).

    Naturally, they wanted to change the criteria and group by something else. "Sorry, but today's my last day," I grinned. "And it takes at least one full day to make any changes, assuming you got it right the first time."

    Suck. Ers.

    --
    Yeah, right.
    1. Re:MS Access from hell by LostCluster · · Score: 2, Informative

      Things got interesting when I loaded all 2 million rows of data (one per file) into the poor POS Access DB. It took over 8 hours (I left it running and went home; it was still running when I got back. Lo and behold, it accepted every row. Trouble started when I discovered that trying to save a query or report would send the machine into la-la land.

      Whatever you were running on... it wasn't enough of a computer. I've never seen Access truely hang. I've given it requests that take it near-forever to get done, but it gets there in time.

      Your biggest problem was most likely that your table size got so huge that you maxed-out your system's RAM and were resorting to virtual memory for nearly every move you made. That'll cause things to slow down in a hurry. However, that's no excuse to "dump" the DB. You imported once and you did it perfectly... keep that data at all costs.

      What you should have done was to make a copy of the big table's structure, and then copied over enough records to make a suitable test subset, one that exposes any sort of special cases you're expecting. Run your report against the subset when you're testing, and then just switch over the table name from the subset table to the real table when it comes time to run the real report. Why are you bothering to make Access produce 500+ pages all the time when you just need to see your changes laid out once?

      At worst, you could have just saved out the populated tables as a flat-file so that you could have reimported those instead of having to run you takes-a-day import routine...

    2. Re:MS Access from hell by Anonymous Coward · · Score: 3, Informative

      Okay I'll bite...
      I've never seen Access truely hang.

      Then you've never tried to use it to generate crosstab reports on 1-2 million row fact tables. Granted the crosstab query is much nicer than Oracle's summing(decode(field,....)) but I can lock access in a heartbeat.

      Your biggest problem was most likely that your table size got so huge that you maxed-out your system's RAM and were resorting to virtual memory for nearly every move you made.

      Access doesn't load or cache tables in memory. I have 3 Gigs of ram and using Access 97 (filesize limit 1G) or Access 2002 (filesize limit 2G), and I didn't notice any speed increase between a machine running 256M and 3G ram.

      What you should have done was to make a copy of the big table's structure, and then copied over enough records to make a suitable test subset, one that exposes any sort of special cases you're expecting. ...Why are you bothering to make Access produce 500+ pages all the time when you just need to see your changes laid out once?
      If we're talking format changes and not functionality changes, I would agree with you. Any DBA should run an entire dataset and validate output.

      Now here is the fun part
      I've got 3 phrases for you. "Packdata" (embedded binary numerics), fucked up ODBC queries, and "broken csvs." In any mixed environment (DB2 in my case), getting files from the mainframe usually means that any numerics changed to binary - The linefeeds alone will drive you shitty. You have to specifically code Access to drop into binary using VBA.

      Try to do any pass through query against an Oracle instance where the numbers are healthy sized. Access is retarded and will not adjust the field properties accordingly and bomb. You wind up having to wrap calculations around to_char(). Plus Access 97 wouldn't let you disconnect from ODBC without exiting the DB and letting the timer release. Try doing 6 1-hour queries when you have a 2 hour timeout and you'll see what I mean.

      Broken .csvs are exactly that. Try importing Bill's, Inc and see what I mean.

      Okay How about a search and replace function? Don't tell me to open the table and use the Edit -> replace thing. Make sure you enter # and watch all your numbers disappear.
      Access is a steaming pile of dogshit.

  44. I stopped trusting MySQL by yem · · Score: 2, Insightful

    .. the day it returned a date column with the value '2309-46-39'.

    (that, retarded access control system and the random data corruption..)

    --
    No, I did not read the f***ing article!
    1. Re:I stopped trusting MySQL by Hektor_Troy · · Score: 2, Insightful

      I actually think he's being serious.

      What most people don't seem to get is that the database isn't your filesystem. It is to your data what the kernel is to your OS.

      Do he expect a sys_call function to be executed from any random program? Why not? He seems quite willing to judging by his lack of understanding of what the database is for.

      There's a reason database admins can rake in huge fees, and it's not because they think data-integrety checking is done outside the database ...

      --
      We do not live in the 21st century. We live in the 20 second century.
  45. I dislike MySQL by Osty · · Score: 5, Insightful

    Not everyone is a database elitist. Not everyone has to worry about transactions nor store procedures. Triggers are neat, but not always necessary. (Insert obligatory VHS/Beta comment here.)

    You're right, not everybody has to worry about those issues, but maybe they should. However, the problem is not so much with MySQL itself (it's a good, fast, lightweight storage system for simple and small amounts of data). It's with the perception that MySQL is every bit as good as a more robust engine (Oracle, MSSQL, DB2, take your pick) for any application. That is definitely not the case. As well, knowing MySQL does not make you uniquely qualified to decide that it's better than one of the other choices for a system that needs that level of robustness. The biggest problem is that people who only know MySQL choose MySQL because that's all they know, even when it's completely unsuited to the task.


    Add to that the arrogance of the MySQL developers ("These aren't the stored procedures you're looking for ..."), and the zealotry of the user base, and it's easy to see why those of us who do know a thing or two are bitter about MySQL. I laugh anytime someone tells me that they can enforce data integrity from their application layer instead of using foreign keys (usually while trying to clean up their mess of a data set so the data itself can be trusted). I find it hysterical when I'm told that stored procedures are a complete waste of time (typically while fixing someone else's SQL injection problems because they insisted on writing dynamic SQL queries from their code).


    I'm all for making databases and db technology more available to the Average Joe, but MySQL is not the way to do it. If you need free, there are many better alternatives to MySQL (especially if you only need free for training purposes, because then the big three are available to you as well).

    1. Re:I dislike MySQL by Decaff · · Score: 2, Insightful

      Scalability is often not a case of 'enterprise level design', but a sensible choice of platform and technology at the start. Its about allowing for the possibility of enterprise design in the future. Its not about buying Oracle or whatever, its about enabling that possibility.

      This does not take a lot of work, but it does require a more professional attitude than "I gave up with Postgresql after a few hours, and decided to go with MySQL because its cool."

  46. Re:It's too bad by rycamor · · Score: 2, Insightful

    >> ...and if the price is right, poor design is largely unimportant, right?

    I suppose that's something you'll enjoy saying to your clients when they realize their data is corrupted because an application bug circumvented your data model ;-).

    OK, sorry... that was a cheap shot.

    But really, the question is largely one of awareness. Most developers are simply unaware of the logical capabilities of the relational model, so they assume that the things they would do with a "full" SQL system are almost the same as what they would do with MySQL. If that is the case, then of course there is less reason to use MySQL. (there are also those developers who ARE aware of those capabilities but are too much in love with writing extra code, so they prefer to dismiss them)

    But, once you realize that with the proper SQL system...

    1) You no longer need to worry about validating every little piece of data you insert. The design of the [table/view/procedure + constraints] IS the validation, if done properly.

    2) When you need to change or add business logic, you can do it in just one place, and rest assured that no code elsewhere in the system, whether written by you or someone else, can circumvent this.

    3) If for some reason another development team needs to access this data, you don't have to lose sleep wondering if they are screwing up your data or worse.

    4) The *types* in your DBMS actually mean something. (MySQL is so bad at type enforcement that it is almost typeless) ...and these are just a few of the things I am talking about. Yes, if you don't know about them, then of course they don't matter. I developed with MySQL for at least 2 years, blissfully unaware of these things. Then, I found out the capabilities of a real DBMS, and I was able in some cases to reduce my application code by 80-90%. That results in not only a better designed system, but in a *cheaper* system, since writing and debugging is much less trouble, and your liability for data corruption is far less.

    Taking this in the larger context of your post, MySQL can be compared to fast food, such as McDonalds. It's cheap, it's everywhere, and sometimes it hits the spot, but a steady diet of it is ... not recommended ;-).

  47. Comment removed by account_deleted · · Score: 5, Insightful

    Comment removed based on user account deletion

  48. All of these posts are leaving out mSQL by astrashe · · Score: 2, Insightful

    I think that MySQL had a lot of help from mSQL.

    I don't remember the details of the licenses, or exactly what happened, so some of what I say here might be wrong. But wasn't mSQL sort of dominant in this space (people writing simple web/db apps on linux) until they did something ugly with their license?

    And wasn't MySQL's API sort of similar to mSQL's, making it easier for projects like PHP to pick up MySQL?

  49. And Access is more popular still by zenzen667 · · Score: 2, Interesting
    'Popularity' is a totally unimportant benchmark. Unfortunately, I tend to find most MySQL users either:
    1. don't know enough about databases to understand why they should be using a different tool
    2. members of the 'I have a hammer, therefore this problem is a nail' sect
    3. people making money from the first two groups
    Finding someone using it and can give good technical reasons *why* they are using it is a rare find. Feel free to substitute Access, Visual Basic, Perl, C, Java, C# or C++, Windows or Bose for MySQL if you like.
  50. Are you kidding? by Anonymous Coward · · Score: 4, Insightful

    A view is just a query which you can run again sometime?

    You really need to learn RDBMS theory.

    I do find it interesting that Linux users like to lord over Windows users how "sophisticated" they are, but when it comes to MySQL, they use the "well it does what I need" excuse, ignoring the gaping technical issues with the product.

  51. Why MySQL grew so fast: by DrMrLordX · · Score: 5, Funny

    1. Bovine growth hormones in its milk
    2. Possible steroid abuse

  52. Question SHOULD be: Why did Postgres grow so slow? by gtoomey · · Score: 2, Interesting
    Version 4.1 of mysql is the first "usable" version. This version has subqueries, union, and derived tables. Buy still no views or synonyms.

    But Postgres has been a fully functional RDMBS for years, with the features a professional needs.

    Both can be obtained for free (though mysql is dual licenced). Maybe mysql has better marketing or offers better support, while becoming the default database for PHP?

  53. MySQL doesn't scale by Siener · · Score: 4, Informative

    I like the idea of MySQL. It's great. But it's not ready for the big time. Not nearly.

    Yes there are work arounds for the missing features. These work arounds are usually - do it in the application code. Yes I can do it in the application code, but that takes away many of the benefits of using a RDBMS in the first place.

    To give you a quick idea. Our clients have complex MS SQL Server db's that hold a lot of data, all somehow related to each other. A few quick queries on my dev db gives the following results :
    1061 tables
    1742 stored procs
    1281 triggers

    The database gets accessed in a lot of different ways. This includes, but is not limited to :
    C++ via ODBC
    C++ via ADO
    Delphi via ODBC
    Delphi via ADO
    JSP Pages
    ASP Pages
    Java Servlets
    Perl Scripts
    Access

    If something new technology comes along we can use it on our db. Why? Because the database is kept consistent through the use of triggers, stored procs and key constraints. If you have mutliple ways to access a database, you do not want your bussiness rules to sit in application code, you want it on the db.

    1. Re:MySQL doesn't scale by plastik55 · · Score: 4, Interesting

      Do they lose money if a comment disappears? No.
      Are they liable for any consequences of losing data? No. Do they need to keep an audit trail? No.

      None of these things have anything to do with how "big" a database is.

      The kicker is, slashdot isn't very big at all! Can you come back to a story a few months later and comment on it, or even view it according to your preferences? No, it's been removed from the database because and put to static HTML because MySQL doesn't scale!

      --

      I have a positive modifier on Troll. When I mod someone Troll their karma should go UP!

  54. Don't miss this gem! by Nugget · · Score: 4, Insightful
    From the same URL:

    "MySQL uses table locking (instead of row locking or column locking) on all table types, except BDB tables, to achieve a very high lock speed. For large tables, table locking is MUCH better than row locking for most applications"

  55. Right On by Caiwyn · · Score: 5, Insightful

    The article rambles a bit, but it does hit the nail on the head when it comes to what drove the rapid increase in popularity of MySQL -- that it was small, fast, and easy to learn, mainly due to the fact that it did not include features that were, for many users, extraneous.

    When I first went looking for a database to drive my website, my more knowledgeable friends and professional acquaintences all hawked postgresql. Since it was the default db that shipped with Red Hat, I figured I'd try it. I liked how robust it was, but I had a hell of a time finding support for it in the applications I wanted to run. I eventually switched to MySQL (which I had already used for various other projects) because it still remains easier to use, and because PostgreSQL is way more than I need.

    The simple fact of the matter is that most users don't need ACID compliance, or transactions, or what have you. They need a storage system with sql interface, and that's it. Users who need more from a database would pass up MySQL for something better suited to their needs... but those users are in the minority. Everyone else's needs are simple -- MySQL sacrificed the less essential features for speed, simplicity, and ease of use. As a result, it was more attractive to people who were adequately served by its feature set.

    And as MySQL has progressed, it has added in many of those features that higher-level databases like PostgreSQL offer, allowing us the option of using those features in the future.

    The dual license is, in my view, a great business model. It provides the revenue stream open source projects need without sacrificing the freedom for those users who embrace the open source concept. As I understand it, it's free for use, and free to distribute under the terms of the GPL... but you have to pay if you want to use it in a non-GPL product. To me that's genius -- it forces a licensee to play by the same rules he sets, which seems only fair. I wouldn't be surprised to see more projects adopting similar models, nor would I mind.

  56. Re:It's too bad by Arcanix · · Score: 2, Funny

    What rock have you been living under? Have you ever by chance heard of a program called Excel?!? Most robust DB product on the market as far as I know, and I know a lot.

  57. simplicity translates to speed by vallis · · Score: 4, Insightful

    One thing that MySQL isn't is a bloated whale of an application. Oracle is feature rich and under heavy load, when administered correctly, is blazing fast. But that also makes it a system resource pig.

    Part of the reason why every SQL feature in the world isn't implemented is because it sometimes pays to make an application lean. I tend to believe the authors/maintainers have a lean-mean philosophy, and sometimes prefer to let the users implement their own creative solutions instead of providing every bell, whistle and horn.

    As a hypothetical example, one can easily implement an auto_increment feature outside of MySQL using a combination of a simple table declaration and some create PHP or Perl programming. Not that you'd want to, but some creativity can make up for non-implemented features.

    In simple terms, MySQL is the equivalent of a cheetah. It's fast and lean, and accomplishes it's task with agility and grace.

    MySQL is also easy to learn and easy to implement, especially if you are using the Apache/MySQL/PHP or Perl combination. Even better, this entire scheme will run using only 128-megabytes of RAM (thereby making my 5-year old AMD 500MHz still usable!). Try that with Oracle... can you say swap partition hell???

    1. Re:simplicity translates to speed by Anonymous Coward · · Score: 2, Interesting
      MySQL's missing safety features (like constraints) wouldn't be nearly so galling if the engine didn't successfully parse and silently ignore attempts to rely on them. It also wouldn't have been very difficult for them to lock all tables by default during a transaction, and let the user avoid this by autocommit and
      SET TRANSACTION READ ONLY ISOLATION LEVEL READ UNCOMMITTED
      when they're willing to accept answers that are very fast but incorrect.
    2. Re:simplicity translates to speed by Just+Some+Guy · · Score: 2, Insightful
      In simple terms, MySQL is the equivalent of a cheetah. It's fast and lean, and accomplishes it's task with agility and grace.

      That's a pretty good analogy! Now, put a saddle and a 200-pound rider on that cheetah and see how fast it moves.

      MySQL is blazingly fast when doing nothing. PostgreSQL is still blazingly fast when pulling a heavy load, like a Clydesdale on meth. How does that make MySQL better?

      In all seriousness, MySQL is fast because it doesn't do anything for you. By the time you shift all of your core logic into the application layer, which is often something terrible like PHP, the end result will probably be much slower than if you built a proper system with PostgreSQL in the first place.

      --
      Dewey, what part of this looks like authorities should be involved?
  58. Re:It's too bad by jadavis · · Score: 2, Insightful

    When someone is examining a couple alternatives, and one works right away and the other requires reading (even merely 5 pages), the reading just won't happen unless the user really cares. You eliminate a large number of users just by raising the bar a very slight amount.

    However, I'm a postgres user, and I'm here to say that reading 5 pages of docs is not required to issue your first "create table" command.

    In Debian, it's one command to install and it will ask you simple questions, like where to put the data. For those who like a GUI, another command will install pgadmin3. Really, how much easier can it get to install?

    To connect for the first time in Debian, just become the user "postgres" and connect to "template1" and it will let you in without a password (after that you can create more databases and users).

    Why are these vague accusations about usability never pointed at the distributor (Redhat, etc)? I don't complain about the installation difficulties of KDE because Debian handles that for me. If I were to write a usability report of KDE without using Debian, would it be fair to speak of the myriad dependency problems and long compile times? No, it wouldn't, 'cause the distributor handles that for most people.

    And the thing is, MySQL and PostgreSQL, as far as using the database, basically both just provide the ability to execute SQL commands. The difficulty couldn't be over PostgreSQL's syntax for creating a table, I assume. So where is this usability issue appearing? If it's during the install, shouldn't the distribution do a better job of installing it for you?

    It's really not fair to point the finger at postgres when the reality is that your distributor just doesn't care enough to make it easy for you, and maybe their default database is MySQL.

    And even compiling from source, there aren't many packages anywhere near as complicated as PostgreSQL that compile and install so easily.

    --
    Social scientists are inspired by theories; scientists are humbled by facts.
  59. Why MySQL is more popular than Postgres by relativePositioning · · Score: 3, Insightful

    It doesn't seem like anyone is honest enough to spill the beans on this one. Postgres isn't available for windows without using Cygwin. The truth is that most beginers are looking for an executable download... with an installer. If you tell them that they have to compile or install something else first, they freak out.
    The truth is that people are learning on their home systems which are more often than not windows systems. On top of this, most hosting companies only support what is most popular, hence MySQL.
    Once Postgres is available on windows as an executable download with an installer, watch its popularity soar.

    --

    "I'm a loner Dottie, a rebel."
    - Pee Wee Herman
    1. Re:Why MySQL is more popular than Postgres by base_chakra · · Score: 2, Interesting

      That's definitely a big part of it, but not the whole story. PostgreSQL's lack of adequate software support extends to the client side as well. There are very few options for PGSQL front-ends now (although some of them are quite good), but four years ago the selection was downright threadbare. One thing that can be said of MySQL is that MySQL AB at least offers free GUI clients.

      But, I think many people are swayed by the argument that MySQL has a much bigger grassroots support base. While technically that's true, look at the nature of the support base: thousands of redundant questions, many of which are directly related to the lack of features that supposedly makes MySQL great. We're not just talking about views and subselects here: until v4.x, MySQL even lacked UNIONs for god's sake. Fledgling developes may not be able to ask for these features by name, but that doesn't mean they don't feel the lack.

      Since working with MySQL means developing with half of the SQL9x spec tied behind your back, and considering that MySQL's documentation is inadequate (and occasionally inaccurate or misleading), it's no wonder that such a huge support base is necessary.

  60. Often textfiles are perfectly sufficient. by Qbertino · · Score: 3, Insightful

    MySQLs popularity is due to it being percieved as an extension of the textfile solution and it's open and closing problems rather than what database savy would call a database.
    If you want to drop data somewhere and pick it up later - which is usually the case in 99% of the time - MySQL is perfectly sufficient.
    Real usecases of databases however acutally require a solid integration of data and code and transparent runtime access to it. In terms of true object orientednes the 'real' DBs are just as much a compromise as MySQL is and require tall stacks of code to compensate for hardware constraints and data obscurety.
    Object relational DB's that offer absolute transparence of data and application space at runtime are the true thing. But those, appart from a few exeptions, aren't quite there yet.
    Zope/ZopeDB comes to mind as an example of what DBs should be like. Compared to Zope, MaxDB, Postgres or even Oracle are not much more than MySQL. It's all dependent on the perspective.

    --
    We suffer more in our imagination than in reality. - Seneca
  61. Simple: It's not an RDBMS by GrouchoMarx · · Score: 2, Interesting

    The reason MySQL has been so successful is that it is NOT a relational DBMS. It doesn't have any of the features that a "real" database would have. That's the point.

    MySQL is a glorified card catalog with a reduced-SQL interface. And for the vast majority of the projects that use it, that really is all it needs.

    I say this as someone who has not written in any production SQL environments except for MS Access and MySQL. For small stuff, all I want is a card catalog with joins, and MySQL gives me that easily. I know the projects I've worked on aren't going to scale to a million rows, they're only in the few thousands, or in a few cases only a few hundred. If they start to get to the point that they're handling millions of transactions, then I'll be rewriting the whole thing anyway.

    Tell me: WHY would I want to use Oracle or even PostgreSQL for a recipe book or web calendar when MySQL requires less mental overhead for me? I wouldn't. That's like using a Mac truck to drive to the grocery store and back.

    When I start writing financial apps or systems that actually require complete integrity checking, good bye MySQL, hello Postgres. But for right now, MySQL is simple, my web host supports MySQL, and it's all these projects are going to need.

    --

    --GrouchoMarx
    Card-carrying member of the EFF, FSF, and ACLU. Are you?

    1. Re:Simple: It's not an RDBMS by Just+Some+Guy · · Score: 2, Informative
      Tell me: WHY would I want to use Oracle or even PostgreSQL for a recipe book or web calendar when MySQL requires less mental overhead for me? I wouldn't. That's like using a Mac truck to drive to the grocery store and back.

      Answer: don't use every feature that they provide just because they're there. Instead, install and use PostgreSQL and get comfortable with it. Now, you can use it as a flat-text database, or a tera-server with millions of rows, all without having to maintain two systems.

      If your time is valuable, why learn two systems when you can learn one that's only slightly more complex than the other and be done with it?

      --
      Dewey, what part of this looks like authorities should be involved?
  62. Re:It's too bad by ajs318 · · Score: 4, Insightful
    it has no separation between syntax and libraries - making it a complete nightmare to compile and install if you want to enable as many features as possible. They should have designed it so that the language interpreter could be compiled, and then you could add extensions without recompiling PHP itself. PEAR is a step in the right direction, but too many things still rely on built in extensions.
    Read your history. Up till version 4, PHP was still growing. It was designed so that new bits could be kludged in on an as-and-when basis. That may not be "perfect" from the point of view of a snotty programmer who thinks there is only one right way to do anything, but not everyone thinks that way {imagine an electronic engineer and a mechanical engineer showing one another their latest inventions: the elec. eng. is going to bemoan the proliferation of moving parts in the mech. eng.'s design and the mech. eng. is going to deride the elec. eng. for using too few moving parts}.

    Now the feature set is stable, it can always be re-implemented in a more "beautiful" style.
    and WAY too many programs use the mysql_* functions directly. Those things are an abomination to good design. Why the hell should you have to completely rewrite your code to support a different database in these days?
    Well, since the mysql_*, pg_*, sybase_* and so on functions use very similar syntax, try using sed.

    But I think the question we should be asking is, why would you want your code to support a different database anyway? MySQL is free software, so it'll always be available and supported. Ditching some of the bells and whistles and relying on the scripting language (perl, PHP or python) to do some of the donkey work made it bloody fast {e.g. the primitive % and _ wildcards work so much quicker than full-blown regular expression matching, that it's quicker to pull out more records than you need, have the wrapper script do the regular expression matching and just throw away the ones it doesn't need; more of the queries you are going to do are going to be right than wrong, so let the script provide any 'rollback' functionality you may need}, and -- barring a power failure -- it doesn't corrupt its own tables either.

    You obviously think that constraining a programme so it only performs one function is a bad thing -- I guess your ultimate piece of software is one that doesn't care what kind of hardware it is running on or what function it is being asked to perform. But such high ideals are too far removed from reality for most ordinary people to take seriously.

    Most programmes don't need to have so much changeability, because they are designed to do a specific task. You can add your fancy object oriented classes and methods, abstraction layers and sundry filibustering tricks all you like; but nothing will change the fact that, at the end of the day, sooner or later, you can't avoid the inevitable fact of having to get your hands dirty and actually manipulate some data. It does mean that a programme meant for handling order forms with a Postgres backend is going to need a lot changed to make it do cooking recipes with a MySQL backend, but if your audience prefers to see a pony doing one trick well rather than a full repertoire of tricks badly, who's disappointed?
    --
    Je fume. Tu fumes. Nous fûmes!
  63. Re:It's too bad by ozbon · · Score: 2, Interesting

    Now _that's_ funny. I've worked with so many organisations who think that Excel is a database, and really don't see why they should change to something else, regardless of whether it's Access, MySQL, PostGre, Oracle, or whatever.

    It's only once you've shown them a few things that are easier in anything other than Excel that they begin to understand - and in some ways that's why MySQL is useful, it provides a cheap/free alternative to investing in Oracle etc., and is useful for demonstrating the basics of why a DB is better than a spreadsheet.

    --
    I say we take off and nuke it from orbit. It's the only way to be sure...
  64. Re:It's too bad by lee7guy · · Score: 2, Informative

    Get your facts straight.

    The world wide web had already taken off, thanks to Mosaic and Netscape. The company making internet explorer was bought by microsoft when they realized they had missed the train due to Bill Gates' declaration of internet as irrelevant. (Remember, "microsoft network"?)

    --
    Ceterum censeo Microsoftem esse delendam
  65. An immature DBM attracted an immature userbase by ectoraige · · Score: 2, Interesting

    Not trying to flame... talking about maturity of experience...

    Lots of people didn't care. They just wanted to stick dynamic content on their pages.

    Most of them didn't care about things like transactions. They either never heard of them in the first place, or figured they didn't need them.

    Most of them didn't care about portability.

    A few of them found that MySQL was fast when you don't care about these things, and that it was easier to install. The told others, and it became 'cool'...

    I'm not knocking the above, most of them were probably self taught, and have learned a lot since. The MySQL userbase seems to have matured a lot, and as MySQL becomes more like a 'real' DBM, it's users are becoming more like 'real' SQL admins.

    The only real competition at the time was postgres, and it was slower, and possibly more difficult to install. Those of us like me who cared about things like transactions took the extra time to make it work, because we wanted what MySQL didn't offer.

    --
    Vs lbh pna ernq guvf, ybt bss abj. Tb bhgfvqr. Syl n xvgr.
  66. Easy answer... by MattRog · · Score: 4, Insightful

    I can give you the reason why MySQL is so popular: practitioners are ignorant of data management fundamentals (perennial links: Unskilled and Unaware of it and Database Debunkings).

    If you don't understand or know the necessity of things like constraints and tying business logic close to the data then you don't care that MySQL can't do them. It's obvious that MySQL developers do not have a clear understanding of the relational model, either.

    And how is this elitist? Is it elitist to require that engineers who build bridges know the physics behind bridge building? Would you go to a doctor that didn't know the science of human physiology? Why do we not expect the same level of competence from people who build databases?

    As computer professionals we need to hold ourselves to the same standards that we require other professionals. I'm not suggesting, or even think it's a good idea, to license developers but we need to get out of the mindset that it's acceptable to eschew formal ideas (predicate logic/set theory and the Relational Model) for ad hoc junk science (XML, UML, virtually every SQL DBMS product, etc.) all in the nebulous name of 'performance'.

    --

    Thanks,
    --
    Matt
  67. Re:The Truth About MySQL by pw1972 · · Score: 2, Insightful

    My company is a big MS shop, and shis is exactly why we won't hire anyone with an MCSE. They can spout off all sorts of numbers, percentages, tell you the storage size of every variable in the MS world, but when it comes right down to it, they can't deliver results and work SO SO slow.

  68. Re:Problems with postgres in production by GooberToo · · Score: 2, Informative

    You might want to consider upgrading. Most (all?) of these issues have long been resolved. In fact, the latest versions now support auto-vacuuming.

    As long as your application is not holding transactions open and never completing them, vacumming should not be a problem at all.

    If you are having serious performance issues, I sincerely hope that you've contacted someone on the mailing list to determine if they can be resolved. It's certainly possible that PostgreSQL is not right for the job. More often than not, the situations that you described almost always turn out to be improper performance tuning or unrealistic performance expectations for the available hardware; lumping the blame onto PostgreSQL's shoulders.

    It does sound you have some problems there. What did the developers say when you asked for performance tuning assistance?

  69. Good and bad and the lie. by LWATCDR · · Score: 2, Informative

    The Good.
    1 MySQL let thousands if not millions of people work with a SQL database server for the first time.
    2 It is fast which means it could support a lot of people on a pretty cheap machine.
    3 It is easy to setup and learn.
    4 It is very good at provideing dynamic web content.

    The Bad.
    1 It did not support transactions or row level locking. An yes you need them for some applications. It is possible to program around the lack of these features but why?

    The Lie
    "You could also achieve efficient locking without row-level locks; in fact, supporting row-level locks took so much overhead that the application was almost better without them." ummmm.... No you are wrong. Okay you might notice that he said that applications where "almost" better off without them. That means that they are better off with them.

    Don't get me wrong MySQL is a great product and does what 90 percent of the people that want to do. I wish them all the best.

    My other pet peeve right now is the over use of MySQL in free programs. Does a cd catalog really need a SQL database server? Or an address book? Come on folks lets us BerklyDB or even a flat file for goodness sakes. Sometimes a SQL datase server is just over kill.

    --
    See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
  70. If you want to learn a dbms by Stone316 · · Score: 2, Informative

    Download DB2, Oracle or SqlServer. I'm not 100% srue about SqlServer but DB2 and Oracle allow you to download their software for free (with much better documentation) if you only use it for self-education.

    --
    "Thanks to the remote control I have the attention span of a gerbil."
  71. This is not the point... by aksansai · · Score: 2, Insightful

    Read the article again as to why MySQL has had enormous acceptance. It really is a good read. The article's intention was not to say the MySQL is the answer to any and all RDBMS questions. Point being - MySQL works because it's light-weight and fast enough to support even large websites. For the vast majority of general web scripts and even small applications, MySQL does the job - and does so quite nicely.

    If you, in particular, need row-locking capability - look elsewhere. The beauty of open-source is that you have a choice, whether to use or go without. So as far as your "bad" point - MySQL would not be the answer would it?

    To address your peeve, the nice thing about MySQL is that it provides a structured, easy-to-interface method to store a large amount of data for a variety of applications. Sure, you could use a flat-file or BerkleyDB - but then you constrict yourself to how you can access that database.

    MySQL (not to say it's the only one) allow you to connect via a variety of interfaces, a local socket or across a network (standard or encrypted). Having a networked database allows for all kinds of uses for applications that may or may not want to store its data on the computer they are running upon.

    --
    Ayup
  72. You use views to .... by Stone316 · · Score: 2, Informative

    mainly to hide the underlying structure from users. Also, i've seen alot of very complex and long sql in views that you really wouldn't want to put into your application. As the grandparent said, it can also be used for security purposes, something which you don't want to code into your application either. Why? Because sometimes you can't guarantee users are going to enter the database via the application. Views can also be used for version control. Views are view usefull, are they required? Probably not but they sure do make life alot easier. The grandparent may not have stated his case well but there are many valid reasons as to why you'd want to use a DBMS that has views.

    --
    "Thanks to the remote control I have the attention span of a gerbil."
  73. Problem isn't the database by Stone316 · · Score: 2, Insightful

    Its the administrators. I hate to say it but alot of people who run/support databases aren't DBA's! They were either thrown into supporting it, or had an interest but its not their 'job'.

    I've been a DBA for 8 years or so now and I encounter this problem all the time. Once I had a dev. group's call a meeting with us to find out what services we offered. The developers obviously didn't want to be there and were very vocal that they didn't need our services.

    My first question was how did they backup their database? (They were running Oracle..)

    Their response, "Oh, we let the filesystem backup catch it."

    I responded, "Do you shutdown your database first?"

    Them: "No"

    Me: "You need us."

    Save yourself the hassle, if you have a database that is critical to your business, hire someone that knows the internals. Whether its mysql, postgresql, db2, oracle, mssql, your going to save yourself alot of headaches.

    Yeah, I know, DBA's are cool and its fun pretending but seriously, save this stuff for the experts.

    I'm of the opinion that alot of database applications could run just as effectively off of flat files because most apps don't use the advanced features of RDBMS's. Thats why mysql is popular if you ask me.

    --
    "Thanks to the remote control I have the attention span of a gerbil."
  74. Re:It's too bad by ttfkam · · Score: 2, Insightful
    Well, since the mysql_*, pg_*, sybase_* and so on functions use very similar syntax, try using sed.
    Well since Perl DBI, JDBC, ODBC, and PHP ADO et al. work perfectly well, why not use the better solution instead of relying on sed after the fact?
    But I think the question we should be asking is, why would you want your code to support a different database anyway?
    Project requirements change. That is a fact. Your project may not be 99.9% selects anymore. Inserts and updates may become more important. Maybe you want to add a lot more concurrent database clients? In those situations, MySQL turns into a dog compared to other options. When one engine (or operating system) doesn't cut the mustard anymore, it's a question of whether the transition costs are tripled or not.

    Then there's the case where you are not the end user, and the client already has a database they are happy with and/or have trained personnel to maintain it. In this case, MySQL is more expensive for them.

    Most MySQL advocates say that they don't need stored procedures, views, triggers, etc. in the projects they do. Fair enough. But what happens when you come across a project that does need one of these? Oops! Sorry. You're married to MySQL.

    What's that? Stored procedures aren't portable? Mostly that's correct, but they aren't all fundamentally different. In fact, Oracle's procedural language has more in common with PostgreSQL's default procedural language than MySQL has with the SQL92 and SQL99 standards. And porting stored procedures are a damn sight easier than trying to port the custom MySQL functions people write in C in a MySQL-only API.

    MySQL fits your task the best? By all means, use it. But tying yourself inextricably to it? Better get the first-aid ready because sooner or later, you're gonna get bit in the ass for that decision.
    You can add your fancy object oriented classes and methods, abstraction layers and sundry filibustering tricks all you like; but nothing will change the fact that, at the end of the day, sooner or later, you can't avoid the inevitable fact of having to get your hands dirty and actually manipulate some data.
    I agree. I also agree that you don't need to use every feature and technique at your disposal on every project. But that's what MySQL requires much of the time. Your application layer grows in a couple of places when you don't have CHECK constraints in your database. You know what CHECK constraints are, right? They're one of the things that MySQL happily accepts in the CREATE TABLE query, but silently ignores because it's not implemented.

    People say to rely on the app layer to make sure your data is correct and that when MySQL fails silently, it's your fault. If that is so, what happens when a project has more than one developer? Do you know the other's mind? Do they know yours? Gotta rely on good communication, hunh? Wouldn't it be better if the database threw an error during development so that you two were prompted to converse on the subject? Or are you one of those "good teams mind-meld" individuals who discounts that there are different skill sets and expectations on any project.

    Just make your app layer better? If that is so, why not have a database backend that actually catches the errors so you can fix your app layer where broken?

    Still want things more loose? Here's an idea: don't use foreign keys or check constraints. No matter what database you use, you don't have to use every feature. It's good to know that the features are there if you do need them though. MySQL is a leap of faith that you will never need anything more. There is a big difference between the two camps.
    --

    - I don't need to go outside, my CRT tan'll do me just fine.