2009-12-14 33 views
31

Chỉ mục trên cột VARCHAR có làm cho truy vấn chạy chậm hơn không? Tôi có thể biến nó thành int. và tôi không cần phải so sánh LIKE%.Chỉ mục trên Varchar có tạo sự khác biệt về hiệu suất không?

+0

Làm thế nào để hiển thị các truy vấn mẫu minh họa ý của bạn? – wallyk

+2

"chậm" không có ý nghĩa nếu không có thứ gì đó để so sánh. Bạn có hỏi VARCHAR có chậm hơn INT hay VARCHAR được lập chỉ mục có chậm hơn không được lập chỉ mục không? –

+0

Tôi không hiểu. Nếu dữ liệu bạn đang lưu trữ là int, thì loại cột phải là int và bạn sẽ lập chỉ mục cột đó.Nếu dữ liệu là varchar, thì loại cột của bạn là varchar – ram

Trả lời

73

Chỉ mục trên cột varchar có làm cho truy vấn chạy chậm hơn không?

Không, không.
Nếu trình tối ưu hóa quyết định sử dụng chỉ mục, truy vấn sẽ chạy nhanh hơn. INSERT s/UPDATE s/DELETE s trên bảng đó sẽ chậm hơn, nhưng không đủ khả năng để thông báo.

tôi không cần phải làm như% so NHƯ

Hãy nhận biết rằng việc sử dụng:

LIKE '%whatever%' 

... sẽ không sử dụng một chỉ số, nhưng ý chí sau :

LIKE 'whatever%' 

Điều quan trọng là ký tự đại diện cho lefthan d bên của chuỗi có nghĩa là không thể sử dụng chỉ mục trên cột.

Cũng biết rằng MySQL limits the amount of space set aside for indexes - chúng có thể dài tối đa 1000 byte cho bảng MyISAM (767 byte cho InnoDB).

+4

Cảm ơn, tôi không có ý tưởng xóa ký tự đại diện bên trái sẽ sử dụng chỉ mục. Tôi không ngờ rằng các ký tự đại diện sẽ không được hỗ trợ chút nào. – RevNoah

6

Lập chỉ mục không làm cho truy vấn chậm hơn, kích thước cơ sở dữ liệu trở nên lớn hơn, Vì vậy, hãy tiếp tục và thử.

Bạn sẽ có thể nhận được hiệu suất tốt hơn khi tìm nạp hàng nhưng tùy thuộc vào dữ liệu, truy vấn của bạn.

+11

Nó cần phải được chỉ ra rằng lập chỉ mục * không * làm cho chèn chậm hơn, và nó hoàn toàn có thể giết hiệu suất nếu nó đẩy kích thước cơ sở dữ liệu của bạn lên đến điểm mà bạn thường xuyên đánh đĩa. –

+0

Cảm ơn Anon.Bạn đúng! – YOU

2

Bạn sẽ không làm cho truy vấn của mình chậm hơn bằng cách lập chỉ mục. Nếu bạn có thể tạo cột kiểu int, tôi khuyên bạn nên làm như vậy vì hầu hết RDBMS có thể tìm kiếm int nhanh hơn varchars

9

Nếu bạn có thể thay thế cột VARCHAR bằng một số nguyên (mà tôi nghĩ là gợi ý của bạn) Sau đó, chỉ mục bao gồm cột số nguyên sẽ hoạt động tốt hơn cột VARCHAR vì một vài lý do.

  1. Kích thước chỉ mục sẽ nhỏ hơn và ít phân trang hơn.
  2. So sánh các số nguyên tốt hơn nhiều so với varchar.
+1

về điểm 2 -> nơi nào bạn cần so sánh varchar nếu bạn đã lập chỉ mục nó, khác với so sánh LIKE như đã nêu trong câu trả lời được bình chọn nhiều nhất? – shabby

+0

Điểm thứ hai là không đúng sự thật. khi bạn chỉ mục varchar của nó trở thành INT thực sự cho cơ sở dữ liệu, chỉ trên đầu là quét chỉ mục – Peter

0

Có vấn đề về hiệu suất khi nói đến chèn. Tôi có thể chắc chắn cho bạn biết rằng chèn vào một bảng lớn trong đó có một chỉ mục trên một cột varchar có thể rất chậm. (tối đa 50x)

Các vấn đề liên quan