--- fuzzed_data: title: Fuzzed Data summary: Shiba doesn't know the size of {{table}}. For these purposes we set the table size to {{table_size}}. description: | We're not sure how much data this table will hold in the future, so we've pretended there's 6000 rows in it. This can lead to a lot of false positives. To improve results, please give shiba your index statistics. level: info possible_key_check: title: Oddly reported possible keys description: | MySQL reported that it had keys it could have used, but elected not to use them. Shiba checked each of the possible keys and returned the results from the best key possible. Sometimes "possible_keys" will be inaccurate and no keys were possible. level: info access_type_const: title: One row summary: The database only needs to read a single row from {{table}}. description: | This query selects at *most* one row, which is about as good as things get. level: success access_type_ref: title: Indexed summary: The database reads {{ cost }} rows in {{ table }} via the {{ key }} index ({{ key_parts }}). description: | This query uses an index to find rows that match a single value. Often this has very good performance, but it depends on how many rows match that value. level: success access_type_range: title: Indexed summary: The database uses a "range scan" to read more than {{ cost }} rows in {{ table }} via the {{ key }} index ({{ key_parts }}) description: | This query uses an index to find rows that match a range of values, for instance `WHERE indexed_value in (1,2,5,6)` or `WHERE indexed_value >= 5 AND indexed_value <= 15`. It's very hard to estimate how many rows this query will consider in production, so we've upped the cost of this query. level: info access_type_tablescan: title: Table Scan summary: The database reads 100% ({{ table_size }}) of the rows in {{ table }}, skipping any indexes. description: | This query doesn't use any indexes to find data, meaning this query will need to evaluate every single row in the table. This is about the worst of all possible worlds. This *can* be fine if, say, you're querying a tiny table (less than ~500 rows), but be aware that if this table is not effectively tiny or constant-sized you're entering a world of pain. level: danger limited_scan: title: Limited Scan summary: The database reads {{ query.cost }} rows from {{ query.table }}. description: | This query doesn't use any indexes to find data, but since it doesn't care about ordering and it doesn't have any conditions, it only ever reads {{ query.cost }} rows. level: info ignored: title: Ignored summary: This query matched an "ignore" rule in shiba.yml. Any further analysis was skipped. description: level: info index_walk: title: Index Walk description: | This query is sorted in the same order as the index used, which means that the database can read the index and simply pluck {LIMIT} rows out of the index. It's a very fast way to look up stuff by index. level: success retsize_bad: title: Big Results summary: The database returns {{ return_size }} rows to the client. level: danger retsize_good: title: Small Results summary: The database returns {{ return_size }} row(s) to the client. level: success