Это простой ранжированный запрос, такой как WHERE Id между 1 и 500000? Если это так, вы можете просто запустить N запросов, каждый из которых возвращает 1 / N диапазона. Но это помогает узнать, где вы находитесь в узком месте благодаря однопоточному подходу. Если вы выполняете непрерывное чтение с одного шпинделя диска для выполнения запроса, то вам, вероятно, следует придерживаться одного потока. Если он разделен между шпинделями по некоторому диапазону, то вы можете разумно настроить свои запросы, чтобы максимизировать пропускную способность с диска (то есть читать с каждого диска параллельно с отдельными запросами). Если вы ожидаете, что все строки находятся в памяти, вы можете распараллелить по желанию. Но если запрос является более сложным, вы не сможете легко разбить его на части без дополнительных затрат. В большинстве случаев описанные выше варианты не будут применяться должным образом, и производитель / потребитель, о котором упоминал Джоэл, будет единственным местом для распараллеливания. В зависимости от того, сколько времени вы тратите на обработку каждой строки, это может обеспечить только тривиальные выгоды.