Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: индексы в mysql
 
 автор: Богданн   (09.07.2011 в 16:15)   письмо автору
 
 

Народ, проччитав литературы, по даной теме, получаеться индексы, просто на просто создают клон столбца только в упорядоченом порядке, ну с числами понятно, а что тогда со строковыми индексами???

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:16)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:15)
 

а что с ними не так? Вам знакомо словосочетание алфавитный порядок? вот грубо говоря так

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:22)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:15)
 

Грубо говоря да, но на самом деле они устроены немного сложнее, особенно, если речь заходит об InnoDB, где индексы хранятся совместно с данными и привязаны к первичному ключу. Со строками обычно никаких проблем не бывает, так как фактически каждому символу строки сопоставлено число, нужно только последовательно сравнивать числа до тех пор пока не будет найдено несоответствие (сравнение разумеется с учетом кодировки, т.е. нужны правила какие коды чисел больше, а какие меньше).

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:25)   письмо автору
 
   для: cheops   (09.07.2011 в 16:22)
 

а можно как-то на примере простой базы проследить скорость обработки индескированого столбца и неиндексированого??есть такие?

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:29)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:25)
 

Ну, да можно. Если вы пользуетесь консольным mysql, то видите, что он выводит время выполнения каждой записи. Только таблица должна быть довольно объемная (несколько мегабайт, а лучше десятков мегабайт), так как маленькие таблицы MySQL и без ключей очень быстро обрабатывает.

  Ответить  
 
 автор: Богданн   (09.07.2011 в 16:32)   письмо автору
 
   для: cheops   (09.07.2011 в 16:29)
 

а, как можно заполнить данными базу для експеримента через пхп?

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:39)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:32)
 

да тут проблема, что информация для эксперемента мне кажется должна быть хоть маленько осмыслена
можно конечно сделать два цикла внешний на 50000 итераций и внутренний на 10000 в котором собирается запрос на многострочный INSERT и желательно чтобы данные повторялись, можно поиграть потом с группировками и тд
___
у Вас складывается впечатление, что мы "гады немцы" Вас обманываем?))
зачем проверять, то что уже давно проверено?
есть три вида индексов нужные, бесполезные и вредные

  Ответить  
 
 автор: cheops   (09.07.2011 в 16:54)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:32)
 

Можно и через MySQL, например, создав объединение из нескольких таблиц. Пусть будет таблица из одного столбца из 10 строк
CREATE TABLE ten (
  s text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO ten VALUES('q');
INSERT INTO ten VALUES('w');
INSERT INTO ten VALUES('e');
INSERT INTO ten VALUES('r');
INSERT INTO ten VALUES('y');
INSERT INTO ten VALUES('y');
INSERT INTO ten VALUES('p');
INSERT INTO ten VALUES('f');
INSERT INTO ten VALUES('s');
INSERT INTO ten VALUES('t');
тогда заполнить такую же таблицу huge 10 000 записями можно при помощи запроса
INSERT INTO huge
SELECT
  CONCAT(a.s, b.s, c.s, d.s)
FROM
  ten AS a,
  ten AS b,
  ten AS c,
  ten AS d
ORDER BY RAND()
каждая новая таблица в FROM увеличивает количество записей в тестовой таблице huge в 10 раз. Понятно, что у вас получается не совсем то, что в реальности и такие тестовые таблицы имеют много подводных камней, даже если вместо букв идут слова из словаря (если вы тестируете сложный движок), но для учебных целей её обычно более чем достаточно.

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:59)   письмо автору
 
   для: cheops   (09.07.2011 в 16:54)
 

у меня возникла другая идея
берем обычный текст (благо литературы много в инете)
избавляемся от знаков препинания
эксплодим по пробелам и загоняем в базу :)
пару тройку книг на 1000 страниц я думаю хватит :)

  Ответить  
 
 автор: Богданн   (09.07.2011 в 17:03)   письмо автору
 
   для: Valick   (09.07.2011 в 16:59)
 

спасибо, буим пробовать

  Ответить  
 
 автор: Valick   (09.07.2011 в 19:04)   письмо автору
 
   для: Богданн   (09.07.2011 в 17:03)
 

запрос с группировкой по полю варчар, с подсчетом количества сгруппированных строк (тотал) и ордером по убыванию (тотал) в базе со 156 тыс строк
0.423296928406 с индексом
1.28597378731 без индекса

  Ответить  
 
 автор: cheops   (09.07.2011 в 17:04)   письмо автору
 
   для: Valick   (09.07.2011 в 16:59)
 

Обычно грабят похожий ресурс с реальными сообщениями, так как у сообщений может быть разный размер - это тоже много на что влияет. Тестовые базы данных из словаря все-равно слишком регулярные получаются. Вообще ничего нет лучше реальной базы данных :), но её можно получить только в результате реальной эксплуатации.

  Ответить  
 
 автор: Богданн   (09.07.2011 в 17:02)   письмо автору
 
   для: cheops   (09.07.2011 в 16:54)
 

спасибо, то что нужно.

  Ответить  
 
 автор: Valick   (09.07.2011 в 16:30)   письмо автору
 
   для: Богданн   (09.07.2011 в 16:25)
 

у Вас два варианта - либо поверить наслово, либо набить базу и самому убедиться в том что с индексами селект гораздо быстрее))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования