Спасибо все для Вашей справки.
я сделал 3 редактирования к ошибкам в исходном сообщении.
1) то, ГДЕ, должно было быть ANDs.
2) k4 должны были быть ДЕНЬГИ не VARCHAR. Кроме того, k1 имеет длину 3.
3) k2 не должен быть в операторе Where. Как doofledorfer правильно указывает, не имеет никакого смысла иметь любого другого ГДЕ операторы кроме полного первичного ключа.
Вот ответы на Ваши вопросы:
, Почему Вы кластеризировались на первичном ключе?
у меня создалось впечатление, что PK был установлен как кластерный индекс по умолчанию. Я не изменил его.
, Какие столбцы могут быть ПУСТЫМИ?
Ни один.
, Каковы длины VARCHAR?
я сделал ошибку с типами столбца. Единственный остающийся VARCHAR имеет длину 3.
, Что план запросов дает Вам теперь?
Отправленный в следующем сообщении.
Помогают мне понять больше о таблице. если Ваш PK является k1, k2, Вам не придется выбрать никаким другим столбцом для получения абсолютно уникальной записи. Это было ошибкой. k2 часть PK не находится в операторе Where.
Знание, почему Вам нужен приблизительно миллион возвращенных записей, могло бы помочь мне предоставить лучшее решение.
база данных содержит ежедневные записи (d1 Столбец текста) или данные. Людям нужен доступ к большим суммам этих данных для выполнения их собственных отчетов. Они должны отфильтровать его многими значениями и иметь поставленный отсортированным по времени.
похоже, что Вы только хотите самые ранние записи "g"? Возможно, только новые записи "g"?
Да, последнее. Но я определенное число их. Я не знаю дату начала заранее.
у Вас есть внешние ключи на k3, k4? Нет. Это - единственный интервал таблицы DB.
Комментарии:
, Даже если кластерный индекс является надлежащим, более выборочное поле должно быть на первом месте.
более выборочный индекс не используется в операторе Where (постредактирование!). Таким образом, я беру его, это не должно быть на первом месте в этом случае?
можно хотеть Переместить данные через определенный возраст к таблице истории
В настоящее время, все данные используются настолько сокращающие, не опция.
можно хотеть дефрагментировать индекс
В настоящее время, у меня нет ни одного. Изучит его, если этот поток окажется плодотворным.
Добавляют единственный индекс со столбцами k1-k6 в нем; это должно быть лучшим.
кто-либо еще может прокомментировать это предложение? Liggett78 cammented, которому это удвоит размер DB, не помогая очень из-за сортировки столбца даты. Обратите внимание, что столбец DATE не находится в операторе Where, он только используется для упорядочивания данных.
Попытка, поворачивающаяся k1, k2 в ints и делающая их внешние ключи, это будет использовать намного меньше устройства хранения данных для одного, я думал бы, и я думаю, что это должно быть более быстро (хотя я могу быть неправым там, я предполагаю, что SQL Server кэширует эти значения).
k2 является bigint (ошибка в сообщении orig). Так изменение k1 к интервалу (от VARCHAR (3)) является опцией. Мы действительно думаем, что это будет иметь много значения. И люди действительно думают, что разделение таблицы в k1, k2, d1 и k1, k2, k3, k4, k5, k7 и использование внешних ключей улучшили бы вещи?
Один хороший совет для улучшения скоростей запроса должен вставить подзапрос, который сокращает recordset размер к более управляемому. Вероятно, будет некоторый набор данных, которые сразу сокращают recordset по сравнению с, скажем 10 миллионов строк, к 10 000.
, например, ИЗБРАННЫЙ TOP (g) d1 ОТ (ВЫБИРАЮТ * таблица FROM ГДЕ k1=a С (NOLOCK)), ГДЕ И k3 = c И k4 = d И k5 = e И k6 = f Очень интересный ORDER BY k7
. Это действительно помогло бы? Кажется, что SQL Server был бы очень глуп, если бы это не сокращало данные подобным образом сами.
, Возможно, это время потрачено Вашим UI или отобразить ли данные, возможно, это, время потрачено Сетью?
нет никакого UI. Конечно, существуют сетевые проблемы, перемещающие данные, но я только обеспокоен временем, потраченным для запроса, чтобы начать возвращать результаты (я использую средство чтения данных ADO.NET), в данный момент - одна вещь за один раз:)
.. [чтобы] видеть, что большинство усилений... делит таблицу
, разве кластерный индекс не будет иметь того же эффекта?
Оставляют Ваш первичный ключ в покое, но создают кластерный индекс на Вашем столбце даты, так как это - то, что Вы используете В ORDER BY. Тем путем механизм базы данных начал бы сканировать кластеризованный ключ, сравнивать столбцы с Вашими предоставленными значениями и производить строки, которые удовлетворяют условия.
Походит на звуковой план! Какие-либо другие покровители?
Для суммирования предложений:
1) Создают отдельные индексы на всех ключах: большинство людей голосует не по этому?
2) Создают отдельные индексы на ключах с большинством отличных значений.
3) Создают несколько индекс столбца на [1 116] [приблизительно 1 116] из столбцов, со столбцами с самыми отличными значениями сначала.
4) RAM Броска в нем.
Если это коммерческое программное обеспечение, следующие два замечательных
Мои деньги идут на R , см., Например, представление задач Машинное обучение .
Еще один очень мощный инструмент с открытым исходным кодом - Knime. В чем-то лучше RapidMiner. Что касается рекламы, то вот что я пробовал:
1.Polyanalyst 2.SPSS Clementine 3.Kxen 4.Statistica Data Miner 5.MATLAB
Мне больше всего нравится Polyanalyst. Но это всего лишь мое мнение.
Согласно ежегодным опросам KDnuggets за 2007, 2008 и 2009 годы, RapidMiner является наиболее широко используемым решением для интеллектуального анализа данных с открытым исходным кодом среди экспертов по интеллектуальному анализу данных во всем мире: KDnuggets Data Mining Tool Poll 2009
RapidMiner - это открытый исходный код и 100% Java, RapidMiner гораздо более гибкий и предлагает значительно больше функций, чем Weka и KNIME.
Как насчет набора инструментов для интеллектуального анализа данных Orange с открытым исходным кодом.
Вы можете посмотреть на мой проект - Data Mining SDK.
.