VNIT

Too lazy to think of a slogan

Trang chủ » Diễn Đàn » Hỏi đáp Tin học » SQL và Cơ sở dữ liệu » Nhờ tư vấn cách tạo index trong mysql

Chủ đề đã bị khóa, bạn không thể xóa, sửa hay trả lời trong chủ đề này!

First Page Previous Page  1  Next Page Last Page
Locked Nhờ tư vấn cách tạo index trong mysql
0
question Gởi bởi Coder (8:49 14-11-2011)
Bài: 343 / Điểm VCS: 344 /

Mình có đọc qua vài bài viết nói về tạo index giúp truy vấn nhanh hơn, hiện tại mình có 1 table nội dung khoản 600MB, nhưng chưa tạo index cho nó, bắt đầu thấy tình trạng chậm chậm vì dữ liệu đc đưa vào thường xuyên (chạy cron định kì tự insert dữ liệu) .. Sau khi đọc qua vài bài cách tạo index thì ko biết tạo sao, table này chỉ chưa nội dung như site tin tức vậy (cụ thể là site tin tức) .. search tin thì dùng google, cho nên site chỉ có list tin và đọc tin, vậy tạo index thì mình chỉ tạo cái ID của nó thôi phải ko
---------------
Blog: http://tongkienphi.com
Forum Sad-Blog: http://tongkienphi.com/forum
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Thành Bá Nguyễn (1:09 15-11-2011)
Bài: 18,319 / Điểm VCS: 17,795 /

Bạn phải đưa cấu trúc các table của bạn thì mới góp ý chính xác được. Tuy nhiên, qui tắc chung là:
- Khoá chính thì đã có sẵn index rồi, không cần tạo index cho khoá chính
- Các column nào xuất hiện trong WHERE (ví dụ WHERE email='abc@domain.com') thì index nó (như trong ví dụ thì bạn index column email).
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Coder (20:46 15-11-2011)
Bài: 343 / Điểm VCS: 344 /

Đây là cấu trúc table content của e, a T xem thử

CREATE TABLE IF NOT EXISTS `ce_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `catid` int(11) NOT NULL,
  `title` varchar(250) NOT NULL,
  `title_ascii` varchar(250) NOT NULL,
  `thumb` varchar(250) NOT NULL,
  `content` text NOT NULL,
  `source` varchar(50) NOT NULL,
  `datecreated` int(11) NOT NULL,
  `visit` int(11) NOT NULL DEFAULT '0',
  `comment` int(11) NOT NULL DEFAULT '0',
  `link` mediumtext NOT NULL,
  `frontpage` int(1) NOT NULL DEFAULT '0',
  `active` enum('0','1') NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  FULLTEXT KEY `title_ascii` (`title_ascii`,`content`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=79706;
---------------
Blog: http://tongkienphi.com
Forum Sad-Blog: http://tongkienphi.com/forum
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Thành Bá Nguyễn (22:33 15-11-2011)
Bài: 18,319 / Điểm VCS: 17,795 /

Nếu như vậy thì theo rule thứ 2 ở bài viết trước thì bạn sẽ index field nào? ;-)
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Coder (22:36 15-11-2011)
Bài: 343 / Điểm VCS: 344 /

Ban đầu chưa biết index, e nghỉ là index cái id, nhưng mà theo a T nói thì khóa chính đã index sẳn rồi, nên chắc khỏi phải index :D ..
---------------
Blog: http://tongkienphi.com
Forum Sad-Blog: http://tongkienphi.com/forum
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Thành Bá Nguyễn (23:21 15-11-2011)
Bài: 18,319 / Điểm VCS: 17,795 /

Ban đầu chưa biết index, e nghỉ là index cái id, nhưng mà theo a T nói thì khóa chính đã index sẳn rồi, nên chắc khỏi phải index :D ..

Không hẳn như vậy đâu vì nó còn tuỳ thuộc vào chức năng và yêu cầu của chương trình của bạn nữa.
Ví dụ chương trình của bạn có chức năng view 1 content, thì câu query của bạn có thể như sau:
SELECT * FROM ce_content WHERE id=123
Với câu query này thì bạn không cần thêm index gì cho table của bạn vì điều kiện tìm kiếm là trên khoá chính ID, mà khoá chính thì mặc định nó đã được index rồi.

Nhưng nếu chương trình của bạn có chức năng: hiển thị toàn bộ các content trong 1 category nào đó, câu query của bạn có thể sẽ như sau:
SELECT * FROM ce_content WHERE catid=123
Lúc này thì bạn cần phải index thêm column catid vì điều kiện search của bạn ở đây là trên column catid.
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Coder (0:50 16-11-2011)
Bài: 343 / Điểm VCS: 344 /

E có đọc qua 1 bài nó nói như sau:

{color="008080"}SELECT user_goal FROM tblUsers WHERE user_id = ‘120956′;

MySQL biết rằng phải tìm ở table tblUsers nhưng nó sẽ không biết bắt đầu từ đâu. Thậm chí nó cũng không biết trước rằng có bao nhiêu kết quả . Do đó nó sẽ duyệt qua tất cả danh sách (vd Hơn 300.000 người) để tìm thông tin về Nguyễn Văn A.

mysql>EXPLAIN SELECT user_id,user_firstname,user_surname FROM tblUsers WHERE user_id= ‘120956‘;

+———-+——+—————+——+———+——+——+————+

| table | type | possible_keys | key | key_len | ref | rows | Extra |

+———-+——+—————+——+———+——+——+————+

| tblUsers | ALL | NULL | NULL | NULL | NULL | 86792| where used |

+———-+——+—————+——+———+——+——+————+
Wow, nhìn lại câu query của chúng ta mới thật khủng khiếp. Không có Possible_keys nào được sử dụng, MySQL phải duyệt qua 86792 bản ghi mới tìm ra cái ta cần (Hãy tưởng tượng 1 Forum sẽ có đến hơn 500.000 bản ghi).
Bây giờ chúng ta sẽ thêm Index vào và query lại

mysql>ALTER TABLE tblUsers ADD INDEX idx_userid(user_id);{/color}


Vậy trong trường hợp này tại sao nó lại index cái id vậy anh Thành
---------------
Blog: http://tongkienphi.com
Forum Sad-Blog: http://tongkienphi.com/forum
Locked Re: Nhờ tư vấn cách tạo index trong mysql
0
answer Gởi bởi Thành Bá Nguyễn (1:16 16-11-2011)
Bài: 18,319 / Điểm VCS: 17,795 /

Column ID bạn khai báo là khoá chính, mà khoá chính thì mặc định được tự động index rồi. Còn các column khác thì MySQL sẽ không tự động tạo index mà bạn phải tự tạo theo nhu cầu sử dụng.
First Page Previous Page  1  Next Page Last Page

Thống kê

Hiện tại web site có 85,806 thành viên. Xin chào đón thành viên mới nhất nightt.

Các thành viên đã tạo 62,822 chủ đề và 241,950 bài viết trong 30 box.

Hiện có 0 thành viên và 1 khách đang trực tuyến.

Template by styleshout / Icons by Tango Icon Library and FamFamFam.