Traditionally (a few years ago) the standard advice was not to use custom fields if you can avoid it, but I think that advice is not particularly good because I think people use hundreds, if not over a 1000 custom fields in an instance without coming to a crawl.
I know that:
- Type of custom field should make a difference e.g. a small single select puts of a load than a multi-select.
- Restricting custom fields to only certain projects via config scheme should not affect other projects.
I also know that JIRA uses 2 types of "databases" in the background that should directly affect performance. The SQL creates a new row for every non-empty column of data (so no row if the column is empty I believe). Similarly the Lucene "cache" should have little performance hit for fields that are not populated - based on how Lucene works.
The SQL db is only, or mostly only, used for single-record view of the issues, whereas the Lucene cache is used almost everywhere else.
So within the project using these mostly-null fields there should be:
- Very little performance degradation if the fields are not being queried for display. Right?
- If most of the fields are null then even if the JQL includes a filter clause that restricts on these fields' values then the performance would still be decent because reverse-index (or whatever it is called) would still be small. Right?
I understand that there may be other factors that affect performance still but I'd like to know if anyone has real experience with this sort of scenario.
Thanks