diff --git a/dask/array/slicing.py b/dask/array/slicing.py
--- a/dask/array/slicing.py
+++ b/dask/array/slicing.py
@@ -615,10 +615,10 @@ def take(outname, inname, chunks, index, itemsize, axis=0):
 
     >>> import dask
     >>> with dask.config.set({"array.slicing.split-large-chunks": True}):
-    ...      chunks, dsk = take('y', 'x', [(1, 1, 1), (1000, 1000), (1000, 1000)],
+    ...      chunks, dsk = take('y', 'x', [(1, 1, 1), (2000, 2000), (2000, 2000)],
     ...                        [0] + [1] * 6 + [2], axis=0, itemsize=8)
     >>> chunks
-    ((1, 3, 3, 1), (1000, 1000), (1000, 1000))
+    ((1, 3, 3, 1), (2000, 2000), (2000, 2000))
     """
     from dask.array.core import PerformanceWarning
 
@@ -639,7 +639,7 @@ def take(outname, inname, chunks, index, itemsize, axis=0):
     # configured chunk size.
     nbytes = utils.parse_bytes(config.get("array.chunk-size"))
     other_chunks = [chunks[i] for i in range(len(chunks)) if i != axis]
-    other_numel = math.prod(sum(x) for x in other_chunks)
+    other_numel = math.prod(max(x) for x in other_chunks)
 
     if math.isnan(other_numel) or other_numel == 0:
         warnsize = maxsize = math.inf

cc @TomAugspurger 
I haven't looked at this in a while. It does look like a bug and your suggested fix seems right. But we should make sure that there isn't an intermediate chunk created that exceeds the warning threshold.
@jakirkham when you are back from PTO can you take a look at this ?
I looked at this with @ian-r-rose, and we think `@d70-t`'s proposed fix looks right. We tried out the fix locally and all the tests passed, I'll open a PR. :)
diff --git a/dask/array/tests/test_slicing.py b/dask/array/tests/test_slicing.py
--- a/dask/array/tests/test_slicing.py
+++ b/dask/array/tests/test_slicing.py
@@ -874,8 +874,15 @@ def test_slicing_plan(chunks, index, expected):
 def test_getitem_avoids_large_chunks():
     with dask.config.set({"array.chunk-size": "0.1Mb"}):
         a = np.arange(2 * 128 * 128, dtype="int64").reshape(2, 128, 128)
-        arr = da.from_array(a, chunks=(1, 128, 128))
         indexer = [0] + [1] * 11
+        arr = da.from_array(a, chunks=(1, 8, 8))
+        result = arr[
+            indexer
+        ]  # small chunks within the chunk-size limit should NOT raise PerformanceWarning
+        expected = a[indexer]
+        assert_eq(result, expected)
+
+        arr = da.from_array(a, chunks=(1, 128, 128))  # large chunks
         expected = a[indexer]
 
         # By default, we warn

wrong calculation of `warnsize` in slicing?
<!-- Please include a self-contained copy-pastable example that generates the issue if possible.

Please be concise with code posted. See guidelines below on how to provide a good bug report:

- Craft Minimal Bug Reports http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports
- Minimal Complete Verifiable Examples https://stackoverflow.com/help/mcve

Bug reports that follow these guidelines are easier to diagnose, and so are often handled much more quickly.
-->



**What happened**:
```
PerformanceWarning: Slicing is producing a large chunk.
```

**What you expected to happen**:
No performance warning. Resulting chunks are each below 10MiB.

**Minimal Complete Verifiable Example**:

```python
import numpy as np
import dask.array as da
a = da.zeros((100000, 10000000), chunks=(1, 10000000))
a[:,np.arange(1000000)]
```

**Anything else we need to know?**:


The calculation of `warnsize` at [`take`](https://github.com/dask/dask/blob/cccb9d8d8e33a891396b1275c2448c352ef40c27/dask/array/slicing.py#L642) might be wrong. My guess would be, that it should be `max` instead of `sum` like:

```python
np.prod([max(x) for x in other_chunks])
```

That way, the largest resulting chunk would be calculated (instead of chunksize * shape of other dimensions).

**Environment**:

- Dask version: 2022.05.2
- Python version: 3.9.9
- Operating System: Linux
- Install method (conda, pip, source): pip


dask/array/tests/test_slicing.py::test_getitem_avoids_large_chunks
dask/array/tests/test_slicing.py::test_slicing_with_Nones[index1-shape0] dask/array/tests/test_slicing.py::test_negative_n_slicing dask/array/tests/test_slicing.py::test_gh4043[True-True-True] dask/array/tests/test_slicing.py::test_take_sorted dask/array/tests/test_slicing.py::test_index_with_int_dask_array_negindex[4] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks4-None] dask/array/tests/test_slicing.py::test_shuffle_slice[size2-chunks2] dask/array/tests/test_slicing.py::test_slicing_with_negative_step_flops_keys dask/array/tests/test_slicing.py::test_slicing_plan[chunks0-index0-expected0] dask/array/tests/test_slicing.py::test_gh4043[False-False-False] dask/array/tests/test_slicing.py::test_slicing_plan[chunks2-index2-expected2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks2-2] dask/array/tests/test_slicing.py::test_slicing_with_newaxis dask/array/tests/test_slicing.py::test_slicing_with_Nones[index2-shape0] dask/array/tests/test_slicing.py::test_gh3579 dask/array/tests/test_slicing.py::test_gh4043[False-False-True] dask/array/tests/test_slicing.py::test_gh4043[True-False-True] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nanchunks[2] dask/array/tests/test_slicing.py::test_slice_optimizations dask/array/tests/test_slicing.py::test_index_with_int_dask_array[None-3] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_indexerror[4] dask/array/tests/test_slicing.py::test_boolean_numpy_array_slicing dask/array/tests/test_slicing.py::test_pathological_unsorted_slicing dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks2-3] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks3-1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks1-3] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks2-1] dask/array/tests/test_slicing.py::test_slicing_integer_no_warnings dask/array/tests/test_slicing.py::test_slicing_identities dask/array/tests/test_slicing.py::test_uneven_chunks dask/array/tests/test_slicing.py::test_slicing_with_singleton_indices dask/array/tests/test_slicing.py::test_take_avoids_large_chunks dask/array/tests/test_slicing.py::test_normalize_index dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[int64] dask/array/tests/test_slicing.py::test_sanitize_index dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[uint32] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[None-1] dask/array/tests/test_slicing.py::test_getitem_avoids_large_chunks_missing[chunks0] dask/array/tests/test_slicing.py::test_empty_slice dask/array/tests/test_slicing.py::test_slicing_consistent_names dask/array/tests/test_slicing.py::test_slice_array_null_dimension dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nanchunks[3] dask/array/tests/test_slicing.py::test_take_semi_sorted dask/array/tests/test_slicing.py::test_gh4043[True-False-False] dask/array/tests/test_slicing.py::test_slicing_and_chunks dask/array/tests/test_slicing.py::test_None_overlap_int dask/array/tests/test_slicing.py::test_multiple_list_slicing dask/array/tests/test_slicing.py::test_slicing_with_Nones[index3-shape2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nocompute dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nanchunks[5] dask/array/tests/test_slicing.py::test_index_with_bool_dask_array_2 dask/array/tests/test_slicing.py::test_slicing_with_numpy_arrays dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[uint8] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks2-None] dask/array/tests/test_slicing.py::test_new_blockdim dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[uint64] dask/array/tests/test_slicing.py::test_slicing_with_Nones[index2-shape2] dask/array/tests/test_slicing.py::test_uneven_blockdims dask/array/tests/test_slicing.py::test_slicing_with_Nones[index1-shape1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[uint16] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[int8] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[None-2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks3-3] dask/array/tests/test_slicing.py::test_take_uses_config dask/array/tests/test_slicing.py::test_slicing_with_Nones[index0-shape1] dask/array/tests/test_slicing.py::test_slicing_with_Nones[index1-shape2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks3-2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks4-2] dask/array/tests/test_slicing.py::test_empty_list dask/array/tests/test_slicing.py::test_index_with_int_dask_array[None-None] dask/array/tests/test_slicing.py::test_setitem_with_different_chunks_preserves_shape[params0] dask/array/tests/test_slicing.py::test_slicing_chunks dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks1-2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nanchunks[4] dask/array/tests/test_slicing.py::test_slicing_plan[chunks1-index1-expected1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_0d[3] dask/array/tests/test_slicing.py::test_oob_check dask/array/tests/test_slicing.py::test_slice_array_3d_with_bool_numpy_array dask/array/tests/test_slicing.py::test_slicing_with_Nones[index0-shape2] dask/array/tests/test_slicing.py::test_shuffle_slice[size1-chunks1] dask/array/tests/test_slicing.py::test_index_with_bool_dask_array dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks4-1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_0d[1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks1-1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks1-None] dask/array/tests/test_slicing.py::test_slicing_with_Nones[index2-shape1] dask/array/tests/test_slicing.py::test_slice_array_1d dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[int16] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_dtypes[int32] dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks4-3] dask/array/tests/test_slicing.py::test_permit_oob_slices dask/array/tests/test_slicing.py::test_slice_list_then_None dask/array/tests/test_slicing.py::test_index_with_int_dask_array[x_chunks3-None] dask/array/tests/test_slicing.py::test_slicing_with_Nones[index0-shape0] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_0d[2] dask/array/tests/test_slicing.py::test_setitem_with_different_chunks_preserves_shape[params1] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_nanchunks[1] dask/array/tests/test_slicing.py::test_slicing_consistent_names_after_normalization dask/array/tests/test_slicing.py::test_make_blockwise_sorted_slice dask/array/tests/test_slicing.py::test_slice_1d dask/array/tests/test_slicing.py::test_slice_stop_0 dask/array/tests/test_slicing.py::test_index_with_int_dask_array_negindex[2] dask/array/tests/test_slicing.py::test_index_with_int_dask_array_indexerror[2] dask/array/tests/test_slicing.py::test_slice_singleton_value_on_boundary dask/array/tests/test_slicing.py::test_take dask/array/tests/test_slicing.py::test_negative_list_slicing dask/array/tests/test_slicing.py::test_gh4043[True-True-False] dask/array/tests/test_slicing.py::test_slice_array_2d dask/array/tests/test_slicing.py::test_slicing_with_Nones[index3-shape0] dask/array/tests/test_slicing.py::test_shuffle_slice[size0-chunks0] dask/array/tests/test_slicing.py::test_slicing_with_Nones[index3-shape1] dask/array/tests/test_slicing.py::test_sanitize_index_element dask/array/tests/test_slicing.py::test_boolean_list_slicing dask/array/tests/test_slicing.py::test_gh4043[False-True-False] dask/array/tests/test_slicing.py::test_gh4043[False-True-True]