Provide multiple levels of detail for your textures by using mipmaps.
Texture sampling in GPU hardware works best when the texture's dimensions are close to the dimensions in the rendered image. In that case, the samples being read from the texture are sampled at a similar frequency to the source data. Imperfections are minimized through the use of linear or bilinear filtering.
If the rendered image is much smaller than the texture, to properly filter the pixels to the destination color, the GPU would need to fetch many pixels from the texture. For example, in the image below, for each pixel in the output, the GPU would need to fetch and blend together a quarter of the pixels from the texture. But GPUs don't work like that; using bilinear filtering, the GPU samples and blends four pixels at a time. Because you usually can't control precisely which pixels are fetched, the GPU may produce an incorrect image, and the image may shimmer or change as you animate the content.
To solve this problem, GPUs use mipmaps. Mipmaps are sometimes called levels of detail (LOD). Mipmaps are progressively smaller versions of the same texture image whose contents have already been generated at the proper size, as shown in the figure below. The complete set of mipmaps in a texture is sometimes called the mipmap chain.
The mipmaps are numbered; mipmap 0 is the top mipmap on the chain. Smaller mipmaps have a larger index and are lower on the mipmap chain. Each level is half the size of the previous level, with a minimum length of 1 pixel in each dimension.
When you render using a texture that has mipmaps, if the rendered primitive is significantly smaller than the image in mipmap 0, the GPU can sample pixels from other mipmaps instead. In a sense, you've already prefiltered the images. Also, if the GPU only needs to sample lower-level mipmaps, it samples fewer pixels overall, reducing the amount of memory bandwidth and cache memory needed and further improving performance.