2010-09-22 4 views
2

У меня есть большая база данных (180k + строки и быстро растущая) данных о местоположении, и я рисую их на карте google. Для данного порта просмотра я просто хочу подать образец из 100 применимых точек. Поэтому база данных запрашивается lat/lng, но если я помещу индекс в эти строки, проблема состоит в том, что образец из 100 пунктов будет либо внизу, либо в верхней части порта представления (в зависимости от того, как используется индекс) , Если индекс не используется, точки в значительной степени случайным образом разбросаны по порту представления, что гораздо более желательно. Я могу создать тот же эффект для индексированных результатов, выполнив файлсорт на третьем, довольно случайном поле.MySQL: лучше ли иметь индекс и небольшой файловый сервер или индекс и нет файлов?

Итак, проблема в том, что лучше: неиндексированный запрос на 180k + строках или индексированный запрос, который будет выглядеть примерно так, как строки 4k & делать filesort? Благодаря!

+0

Для начала: убедитесь, что вы правильно поняли термин «filesort»: http://www.mysqlperformanceblog.com/2009/03/05/what-does-using-filesort-mean-in-mysql/ – zerkms

+0

Ничто не указывает на то, что он не делает? ORDER BY RAND() всегда использует filesort, не так ли? –

ответ

2

Вы найдете много аргументов против использования «ORDER BY RAND()», хотя это может быть полезно в этой ситуации, если вы сделать индекс поля, и вы найдете результаты профилирования, чтобы быть приемлемыми:

mysql> select id from table where id > 10000 and id < 20000 order by rand() limit 0,10; 
+-------+ 
| id | 
+-------+ 
| 18560 | 
| 18408 | 
| 14058 | 
| 19090 | 
| 11100 | 
| 18945 | 
| 12656 | 
| 16549 | 
| 19321 | 
| 12003 | 
+-------+ 
10 rows in set (0.04 sec) 
+0

Мой текущий заказ by clause является лишь псевдослучайным, но отлично подходит для того, что мне нужно. Для фактического сортировки случайным образом предположительно будет просто дополнительное напряжение, которое не будет служить никаким целям. – user435281

+0

Если вы спрашиваете, что лучше с точки зрения производительности, вы должны сравнить оба подхода с использованием команд профилирования MySQL в консоли. –

2

Профилирование запроса с помощью индекса и без него. Я использую профилировщик в dbForge Studio для MySQL.