作者回复: 你可以查看下MySQL中的performance_schema.table_io_waits_summary_by_index_usage数据表,它表明了每个索引进行统计的I/O等待事件,其中COUNT_STAR代表了事件的次数。过滤掉一些系统表,查看下数据表中有哪些索引不经常使用,具体的SQL语句:SELECT OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME,COUNT_STAR FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE INDEX_NAME IS NOT NULL
AND COUNT_STAR = 0
AND OBJECT_SCHEMA != 'mysql' AND OBJECT_SCHEMA != 'performance_schema'
作者回复: 对的 如果%在左侧就是前模糊匹配,有索引也会失效。所以字符串进行匹配的时候,需要最左侧是个明确的字符才能使用上索引。
作者回复: 因为文件大于100M,就先放到百度网盘:https://pan.baidu.com/s/1LBEAm50DDP9AjErLtGplLg
提取码:32ep
多谢建议,我把它也放到GitHub上,大于100M的给出百度网盘的链接
作者回复: 一本经典的书《Towards a Logical Reconstruction of Relational Database Theory》
另外关系型数据库里面也有不同的使用场景,比如关于图像检索的
《Chabot: Retrieval from a Relational Database of Images》
查询XML的:
《Storing and querying ordered XML using a relational database system》
作者回复: 这个看需求,对于某个疾病(发病率很低)的正样本,可以选择创建索引。如果性别男女都需要查看,可以不建索引,对于女性,优化器也不会使用索引进行查找。
作者回复: 感谢!有些地方会给出数据集,让大家做练习,这样会更容易理解
作者回复: 重复值高的字段一般不创建索引,重复率高于10%可以考虑不创建索引,具体情况也要具体分析,比如通常我们都不应该给性别字段创建索引,因为重复度高,但是如果数据集是女人国,男性比例只有0.01%,而且我们想要查询哪些为男性的情况,此时我们使用索引进行查询效率会更高。这种情况也适用于某种疾病的查询,是否患有某个罕见病的数值为0或者1,且疾病的发病率(数值=1的情况)往往很低,但是如果我们想要进行查询哪些人患病了这种疾病,将这个字段创建索引进行查询效率高,因为我们想要查找的这个人群区分度还是很高的。