A bit late to answer this, but since its coming up for relevant search, this will be of use to somebody :
WordPress uses EAV database schema for part of its database implementation. This affects both the data, and users. (They are kept in separate tables)
To explain it from data angle:
Along with the directly accessible post related details in wp_posts, numerous meta is posted to wp_postmeta table for each post. Any data relevant to the post (or custom post type).
Problem with that is, if you have HEAPS of posts or pages (or custom post/data), it becomes quite slow to search for any property that is found in meta. You first search all the entries in meta table for the criteria you need, then get the relevant post from the table. The kicker is that you need to search for EACH criteria separately. So one search for tag, you get the posts with the value X for 'meta1', then you search for second criteria, say, customcriteria and get post ids with customcriteriavalue1 in customcriteria, AND then take the intersection of these and then go to get the post details from posts table with that intersection.
As an example - put 30,000 products into WooCommerce, and you will end up with ~1,800,000 rows in wp_postmeta as explained in below answer:
Post meta vs separate database tables
So, not only this will make searching very very inefficient (especially when you do self joins on wp_postmeta for multiple criteria), but also even querying a single row from among 1,8 mil rows does cause a performance hit.
EAV schema deficiency.
So with a lot of posts, WordPress db implementation makes complex searches very slow.
Running a WordPress site with thousands of posts is quite doable, if you use caching plugins. You can go even more. But the searches will be a problem.
Its the same with users too - wp_usermeta uses the same EAV format as well. So if you get a lot of users, and have a lot of plugins that store various user data in wp_usermeta, you will take the same performance hit.
Not to mention with so many users its likely that you will have a high number of posts already - unless your app is something that has to do with users mostly (CRM etc), and you choose to store your user data in wp_usermeta instead of wp_postmeta. (Unlikely though).
There are some plugins which try to go around this issue, like Meta Accelerator.
This plugin takes any data for any given post type you choose and puts them in flat tables. This speeds up searching a lot, and it also speeds up querying any singular value.
But that plugin is in its infancy yet.
Alternatively, you can install ElasticSearch in the server and use ElasticPress plugin or another plugin that integrates it to WordPress to speed up such searches.