คำถามติดแท็ก indexing

โครงสร้างข้อมูลการจัดทำดัชนีเป็นเทคนิคทั่วไปเพื่อปรับปรุงความเร็วของการค้นหาข้อมูล

4
ทำไม PostgreSQL ทำการสแกนตามลำดับในคอลัมน์ที่จัดทำดัชนี
ตัวอย่างที่ง่ายมาก - หนึ่งตารางหนึ่งดัชนีหนึ่งแบบสอบถาม: CREATE TABLE book ( id bigserial NOT NULL, "year" integer, -- other columns... ); CREATE INDEX book_year_idx ON book (year) EXPLAIN SELECT * FROM book b WHERE b.year > 2009 ให้ฉัน: Seq Scan on book b (cost=0.00..25663.80 rows=105425 width=622) Filter: (year > 2009) ทำไมมันไม่ทำการสแกนดัชนีแทน? ฉันพลาดอะไรไป

9
Foreign Key ปรับปรุงประสิทธิภาพการค้นหาหรือไม่
สมมติว่าฉันมี 2 ตารางผลิตภัณฑ์และหมวดหมู่สินค้า ทั้งสองตารางมีความสัมพันธ์กับ CategoryId และนี่คือแบบสอบถาม SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category FROM Products p INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId WHERE c.CategoryId = 1; เมื่อฉันสร้างแผนการดำเนินการ ProductCategories ตารางทำการค้นหาดัชนีคลัสเตอร์ซึ่งเป็นไปตามที่คาดหวัง แต่สำหรับผลิตภัณฑ์ในตารางจะทำการสแกนดัชนีคลัสเตอร์ซึ่งทำให้ฉันสงสัย เหตุใด FK จึงไม่ช่วยปรับปรุงประสิทธิภาพการสืบค้น ดังนั้นฉันต้องสร้างดัชนีบน Products.CategoryId เมื่อฉันสร้างแผนการดำเนินการอีกครั้งทั้งสองตารางทำการค้นหาดัชนี และค่าใช้จ่ายทรีย่อยโดยประมาณจะลดลงมาก คำถามของฉันคือ: นอกจาก FK จะช่วยจำกัดความสัมพันธ์แล้วยังมีประโยชน์อื่นอีกไหม? ปรับปรุงประสิทธิภาพการสืบค้นหรือไม่ ฉันควรสร้างดัชนีในคอลัมน์ FK ทั้งหมด (ไลค์ผลิตภัณฑ์ Products.CategoryId) ในตารางทั้งหมดหรือไม่

2
เป็นความคิดที่ดีที่จะทำดัชนีฟิลด์วันที่และเวลาใน mysql หรือไม่?
ฉันกำลังออกแบบฐานข้อมูลขนาดใหญ่ ในแอปพลิเคชันของฉันฉันจะมีหลายแถวเช่นปัจจุบันฉันมีหนึ่งตารางที่มีข้อมูล 4 ล้านรายการ คำค้นหาส่วนใหญ่ของฉันใช้ datetime clause เพื่อเลือกข้อมูล เป็นความคิดที่ดีที่จะทำดัชนีเขตข้อมูลวันที่เวลาในฐานข้อมูล mysql หรือไม่ Select field1, field2,.....,field15 from table where field 20 between now() and now + 30 days ฉันพยายามทำให้ฐานข้อมูลของฉันทำงานได้ดีและการสืบค้นจะทำงานได้อย่างราบรื่น ยิ่งไปกว่านั้นคุณคิดว่าฉันควรจะต้องสร้างฐานข้อมูลที่มีประสิทธิภาพสูงอย่างไร
146 mysql  indexing 

3
คอลัมน์อาร์เรย์ดัชนี PostgreSQL สามารถได้หรือไม่
ฉันไม่พบคำตอบที่ชัดเจนสำหรับคำถามนี้ในเอกสารประกอบ หากคอลัมน์เป็นประเภทอาร์เรย์ค่าที่ป้อนทั้งหมดจะถูกทำดัชนีแยกกันหรือไม่? ฉันสร้างตารางง่าย ๆ ที่มีหนึ่งint[]คอลัมน์และวางดัชนีเฉพาะลงไป ฉันสังเกตเห็นว่าฉันไม่สามารถเพิ่มอาร์เรย์เหมือนกันได้ซึ่งทำให้ฉันเชื่อว่าดัชนีนั้นเป็นส่วนประกอบของรายการอาร์เรย์ไม่ใช่ดัชนีของแต่ละรายการ INSERT INTO "Test"."Test" VALUES ('{10, 15, 20}'); INSERT INTO "Test"."Test" VALUES ('{10, 20, 30}'); SELECT * FROM "Test"."Test" WHERE 20 = ANY ("Column1"); ดัชนีนี้ช่วยค้นหาหรือไม่

2
คำหลัก KEY หมายถึงอะไร
ในคำนิยามตาราง MySQL นี้: CREATE TABLE groups ( ug_main_grp_id smallint NOT NULL default '0', ug_uid smallint default NULL, ug_grp_id smallint default NULL, KEY (ug_main_grp_id) ); อะไรKEYคำหลักหมายถึงอะไร? ไม่ใช่คีย์หลักไม่ใช่คีย์ต่างประเทศดังนั้นมันจึงเป็นเพียงดัชนี ถ้าใช่มีอะไรพิเศษเกี่ยวกับดัชนีประเภทนี้ที่สร้างขึ้นด้วยKEY?
141 mysql  indexing 


3
ดัชนีของ SQL Server - น้อยไปหามากหรือจากมากไปหาน้อย
เมื่อคุณสร้างดัชนีในคอลัมน์หรือจำนวนคอลัมน์ใน MS SQL Server (ฉันใช้รุ่น 2005) คุณสามารถระบุว่าดัชนีในแต่ละคอลัมน์นั้นขึ้นหรือลง ฉันมีความเข้าใจยากว่าทำไมตัวเลือกนี้ถึงที่นี่ การใช้เทคนิคการเรียงลำดับแบบไบนารีการค้นหาจะไม่รวดเร็วเหมือนกันใช่มั้ย ฉันต้องเลือกลำดับใด

9
ฉันควรใช้ดัชนีผสมเมื่อใด
ฉันควรใช้ดัชนีผสมในฐานข้อมูลเมื่อใด การแบ่งประสิทธิภาพโดยใช้ดัชนีคอมโพสิต) คืออะไร? เหตุใดฉันจึงควรใช้ดัชนีผสม ตัวอย่างเช่นฉันมีhomesตาราง: CREATE TABLE IF NOT EXISTS `homes` ( `home_id` int(10) unsigned NOT NULL auto_increment, `sqft` smallint(5) unsigned NOT NULL, `year_built` smallint(5) unsigned NOT NULL, `geolat` decimal(10,6) default NULL, `geolng` decimal(10,6) default NULL, PRIMARY KEY (`home_id`), KEY `geolat` (`geolat`), KEY `geolng` (`geolng`), ) ENGINE=InnoDB ; มันสมเหตุสมผลหรือไม่ที่ฉันจะใช้ดัชนีผสมสำหรับทั้งสองgeolatและgeolngเช่นนั้น: ฉันแทนที่: …

7
ใน Python ฉันจะทำดัชนีรายการกับรายการอื่นได้อย่างไร
ฉันต้องการจัดทำดัชนีรายการกับรายการอื่นเช่นนี้ L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] Idx = [0, 3, 7] T = L[ Idx ] และ T ควรจะเป็นรายการที่มี ['a', 'd', 'h'] มีวิธีที่ดีกว่า T = [] for i in Idx: T.append(L[i]) print T # Gives result ['a', 'd', 'h']
132 python  list  indexing 

3
ดัชนีจำเป็นสำหรับคีย์หลักใน SQLite หรือไม่
เมื่อคอลัมน์จำนวนเต็มถูกทำเครื่องหมายเป็นคีย์หลักในตาราง SQLite ควรสร้างดัชนีอย่างชัดเจนด้วยหรือไม่ SQLite ดูเหมือนจะไม่สร้างดัชนีสำหรับคอลัมน์คีย์หลักโดยอัตโนมัติ แต่บางทีมันอาจทำดัชนีได้ตามวัตถุประสงค์? (ฉันจะค้นหาในคอลัมน์นั้นตลอดเวลา) สถานการณ์จะแตกต่างไปจากคีย์หลักของสตริงหรือไม่

7
ความแตกต่างระหว่างดัชนีท้องถิ่นและดัชนีทั่วโลกใน DynamoDB
ฉันอยากรู้เกี่ยวกับดัชนีรองทั้งสองนี้และความแตกต่างระหว่างดัชนีเหล่านี้ มันยากที่จะจินตนาการว่าสิ่งนี้มีลักษณะอย่างไร และฉันคิดว่านี่จะช่วยผู้คนได้มากกว่าฉัน

7
ฉันต้องสร้างดัชนีบนคีย์ต่างประเทศบน Oracle หรือไม่
ผมมีตารางและตาราง A มีคีย์ต่างประเทศกับในคีย์หลัก 's,BABBB_ID ด้วยเหตุผลบางอย่าง (ฉันรู้ว่ามีเหตุผลที่ถูกต้อง) มันไม่ได้ใช้ดัชนีเมื่อฉันเข้าร่วมสองตารางนี้กับคีย์ ฉันจำเป็นต้องสร้างดัชนีแยกต่างหากA.B_IDหรือการมีอยู่ของคีย์ต่างประเทศให้ข้อมูลนั้น?
121 sql  oracle  indexing 

8
เลือกรายการจากรายการหรือทูเพิลอย่างชัดเจน
ฉันมีรายการ Python ต่อไปนี้ (อาจเป็นทูเพิลก็ได้): myList = ['foo', 'bar', 'baz', 'quux'] ฉันสามารถพูด >>> myList[0:3] ['foo', 'bar', 'baz'] >>> myList[::2] ['foo', 'baz'] >>> myList[1::2] ['bar', 'quux'] ฉันจะเลือกรายการที่ดัชนีไม่มีรูปแบบเฉพาะเจาะจงได้อย่างไร [0,2,3]ตัวอย่างเช่นผมต้องการที่จะเลือก หรือจากรายการใหญ่มากของ 1000 [87, 342, 217, 998, 500]รายการฉันต้องการที่จะเลือก มีไวยากรณ์ Python บางตัวที่ทำเช่นนั้นหรือไม่? สิ่งที่ดูเหมือน: >>> myBigList[87, 342, 217, 998, 500]
121 python  list  select  indexing  tuples 

5
Rails: การเพิ่มดัชนีหลังจากเพิ่มคอลัมน์
สมมติว่าฉันสร้างตารางtableในแอป Rails ในเวลาต่อมาฉันเพิ่มคอลัมน์ที่กำลังทำงาน: rails generate migration AddUser_idColumnToTable user_id:string. จากนั้นฉันก็รู้ว่าฉันต้องเพิ่มuser_idเป็นดัชนี ฉันรู้เกี่ยวกับadd_indexวิธีการนี้ แต่วิธีนี้ควรเรียกว่าที่ไหน? ฉันควรจะเรียกใช้การย้ายข้อมูล (ถ้าใช่อันไหน) จากนั้นเพิ่มวิธีนี้ด้วยมือ

1
Pandas ใช้กฎอะไรในการสร้างมุมมองเทียบกับสำเนา
ฉันสับสนเกี่ยวกับกฎที่ Pandas ใช้เมื่อตัดสินใจว่าการเลือกจาก dataframe เป็นสำเนาของ dataframe ดั้งเดิมหรือมุมมองจากต้นฉบับ ตัวอย่างเช่นถ้าฉันมี df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9)) ฉันเข้าใจว่าqueryส่งคืนสำเนาเพื่อให้เป็นเช่นนั้น foo = df.query('2 < index <= 5') foo.loc[:,'E'] = 40 จะไม่มีผลกับ dataframe ดั้งเดิม, df. ฉันยังเข้าใจว่าสเกลาร์หรือส่วนที่ตั้งชื่อส่งคืนมุมมองดังนั้นการมอบหมายให้กับสิ่งเหล่านี้เช่น df.iloc[3] = 70 หรือ df.ix[1,'B':'E'] = 222 จะเปลี่ยนdfไป แต่ฉันหลงทางเมื่อต้องเจอกับคดีที่ซับซ้อนกว่านี้ ตัวอย่างเช่น, df[df.C <= df.B] = 7654321 การเปลี่ยนแปลงdfแต่ df[df.C <= df.B].ix[:,'B':'E'] ไม่. มีกฎง่ายๆไหมที่นุ่นใช้ว่าฉันหายไป? …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.